经过多年来在这里得到很多伟大的建议,我终于碰到了自学MVC4 ASP.net的墙。从MVC中查看控制器列表4缺少值?
我用这篇文章this post从我的控制器通过Class类型的列表,我的看法,并回到控制器..
public ActionResult SelectProducts()
{
displayProductsList = db.Products.ToList();
displayProductsList.ForEach(delegate(Product p)
{
//get list of recievables for the product
GetReceivablesByProductId(p.ProductID).ForEach(delegate(Receivable r)
{
//Get count of items in inventory for each recievable
p.CurrentInventory += this.CountItemsByReceivableID(r.RecievableID);
});
});
return View(FilterProductInventoryList(displayProductsList));
}
这里是我的看法代码..
@model List<CarePac2.Models.Product>
@{
ViewBag.Title = "SelectProducts";
}
<h2>SelectProducts</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<table>
@*row values*@
@for (int i = 0; i < Model.Count; i++)
{
<tr>
<td>@Html.DisplayFor(m => m[i].Brand)</td>
<td>@Html.DisplayFor(m => m[i].ProductName)</td>
<td>@Html.DisplayFor(m => m[i].UnitType)</td>
<td>@Html.DisplayFor(m => m[i].SalePrice)</td>
<td>@Html.DisplayFor(m => m[i].CurrentInventory)</td>
<td>
@Html.EditorFor(m => m[i].OrderQuantity)
@Html.ValidationMessageFor(m => m[i].OrderQuantity)
</td>
<td></td>
</tr>
}
</table>
<p>
<input type="submit" value="Save" />
@*<input type="submit" value="Cancel" />*@
</p>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
在这里,视图显示它有一个从控制器,以查看传递的列表值..
目视视图正确显示数据(显然我不能发布它的一个形象,直到我有10声誉发表图片)
当我点击提交,并返回到控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SelectProducts(List<Product> selectedProducts)
{
if (ModelState.IsValid)
{
}
}
变量selectedProducts不为空。但是,列表中有3个产品项目,就像您在调试器中的下图中看到的那样,即使我有3个产品项目,当产品列表最初传递到视图时,也没有任何值存在。 。
例如(因为我不能发表图片还):
selectedProducts[0].ProductID=0
selectedProducts[0].ProductName=null
selectedProducts[1].ProductID=0
selectedProducts[1].ProductName=null
您生成的唯一控件是属性'OrderQuantity',这是您的模型将发布的唯一属性。为ID属性添加隐藏输入(如果需要,您应该从数据库中再次获取其他属性) – 2015-04-02 00:58:27
如果您想发布图像,只需提供其URL,然后添加它。 – abatishchev 2015-04-02 01:07:42
你必须获得'OrderQuantity's'的价值吗? – Manoj 2015-04-02 05:16:45