C# MVC 4中从视图到控制器的列表缺少值?

C# MVC 4中从视图到控制器的列表缺少值?,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,多年来,我在这里得到了很多很好的建议,我终于在自学MVC4ASP.net时遇到了困难 我使用这篇文章将一个类型类列表从我的控制器传递到我的视图,再返回到控制器 public ActionResult SelectProducts() { displayProductsList = db.Products.ToList(); displayProductsList.ForEach(delegate(Product p) { //get list of rec

多年来,我在这里得到了很多很好的建议,我终于在自学MVC4ASP.net时遇到了困难

我使用这篇文章将一个类型类列表从我的控制器传递到我的视图,再返回到控制器

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")

您需要使用
@Html.HiddenFor()


这将把数据发送回控制器。这将创建一个
,它将成为表单POST的一部分。

您生成的唯一控件是为属性
订单数量
生成的,因此这是模型中唯一将POST的属性。为ID属性添加隐藏输入(如果需要,您应该再次从数据库获取其他属性)如果您想发布图像,只需提供其url,我就会添加它。您必须获取
OrderQuantity的
值,对吗?是的,目的是显示可用的产品,让用户输入它们的数量,然后,当他们单击“保存”时,后端的控制器将SalesOrder和WorkOrder实体添加到数据库中,然后根据订单数量添加WorkOrderItems的数量。好的,这有助于恢复值,因为我在代码中插入了我的selectedProducts变量,列表中有三个对象,并且每个对象都会按其应有的方式填充值……这会产生站点效果,但是当视图显示时,我从html.DisplayFor更改为html.HiddenFor的所有项目在视图表单上不再可见。我看到的只是订单数量的编辑框。你需要它们。HiddenFor创建了一个元素,该元素始终通过表单post传递回控制器操作。DisplayFor只是将其呈现为文本,与绑定回控制器操作无关。如果您不使用模板根据其数据类型呈现值,也可以使用@Model[i].Brand来呈现值。非常感谢,它现在可以正常工作了。我将花一些时间了解更多关于不同htm.(标记)的信息,以及它们今后的工作。
 [HttpPost]
 [ValidateAntiForgeryToken]
 public ActionResult SelectProducts(List<Product> selectedProducts)
 {
     if (ModelState.IsValid)
     {
     }
 }
selectedProducts[0].ProductID=0
selectedProducts[0].ProductName=null
selectedProducts[1].ProductID=0
selectedProducts[1].ProductName=null
@Html.HiddenFor(m => m[i].ProductID)
@Html.HiddenFor(m => m[i].ProductName)