经过多年在这里获得很多很好的建议之后,我终于碰壁了,自学MVC4 ASP.net。

我使用这篇文章this post将控制器的类型类列表传递到我的视图,然后再传递给控制器​​。

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


这里的视图显示它具有从控制器传递到视图的List的值。

视觉上该视图正确显示了数据(显然我无法发布图像,直到我有10个声誉才能发布图像)

当我点击提交并返回到控制器时:

 [HttpPost]
 [ValidateAntiForgeryToken]
 public ActionResult SelectProducts(List<Product> selectedProducts)
 {
     if (ModelState.IsValid)
     {
     }
 }


变量selectedProducts不为NULL。该列表中有3个产品项,但是,正如您在调试器中的下图中所看到的,即使我有3个产品项,从最初将产品列表传递到视图时,这些值都不存在。 。

例如(因为我还不能发布图片):

selectedProducts[0].ProductID=0
selectedProducts[0].ProductName=null
selectedProducts[1].ProductID=0
selectedProducts[1].ProductName=null

最佳答案

您需要使用@Html.HiddenFor()

@Html.HiddenFor(m => m[i].ProductID)
@Html.HiddenFor(m => m[i].ProductName)


这会将数据发送回控制器。这将创建一个<input type="hidden">,它将成为POST形式的一部分。

关于c# - 在MVC中从 View 列出到 Controller 4缺少值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29403332/

10-09 20:10