Asp.net mvc @用于返回空值的Html.hidden

Asp.net mvc @用于返回空值的Html.hidden,asp.net-mvc,Asp.net Mvc,我试图将表的结果返回给控制器,以便进行进一步操作。返回控制器后,该值显示为null。在过去,我可以使用@Html.HiddenFor返回值,但在本例中它似乎不起作用。我不知道我做错了什么。非常感谢您的帮助 @model IEnumerable<Project.Models.Item> @{ ViewBag.Title = "Welcome to The Project"; } @using (Html.BeginForm("UpdateQuality", "Home",

我试图将表的结果返回给控制器,以便进行进一步操作。返回控制器后,该值显示为null。在过去,我可以使用@Html.HiddenFor返回值,但在本例中它似乎不起作用。我不知道我做错了什么。非常感谢您的帮助

@model IEnumerable<Project.Models.Item>
@{
    ViewBag.Title = "Welcome to The Project";
 }


@using (Html.BeginForm("UpdateQuality", "Home", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    <div class="row">
        <div class="form-group">
            <table class="table table-bordered">
                <tr>
                    <th>@Html.DisplayNameFor(m => m.Name)</th>
                    <th>@Html.DisplayNameFor(m => m.SellIn)</th>
                    <th>@Html.DisplayNameFor(m => m.Quality)</th>
                </tr>
                @for (int i = 0; i < Model.Count(); i++)
                {
                    <tr>
                        <td>@Html.DisplayFor(m => m.ElementAt(i).Name)</td>
                        <td>@Html.DisplayFor(m => m.ElementAt(i).SellIn)</td>
                        <td>@Html.DisplayFor(m => m.ElementAt(i).Quality)</td>

                        @Html.HiddenFor(m => m.ElementAt(i).Name)
                        @Html.HiddenFor(m => m.ElementAt(i).SellIn)
                        @Html.HiddenFor(m => m.ElementAt(i).Quality)

                    </tr>
                }
            </table>
            <div class="form-group">
                <div style="margin-top: 50px">
                    <input type="submit" class="btn btn-primary" value="Advance Day"/>
                </div>
            </div>
        </div>
    </div>
}
@model IEnumerable
@{
ViewBag.Title=“欢迎来到项目”;
}
@使用(Html.BeginForm(“updateequality”,“Home”,new{ReturnUrl=ViewBag.ReturnUrl},FormMethod.Post,new{@class=“form horizontal”,role=“form”}))
{
@DisplayNameFor(m=>m.Name)
@DisplayNameFor(m=>m.SellIn)
@DisplayNameFor(m=>m.Quality)
@对于(int i=0;im.ElementAt(i.Name)
@DisplayFor(m=>m.ElementAt(i.SellIn)
@DisplayFor(m=>m.ElementAt(i).Quality)
@HiddenFor(m=>m.ElementAt(i.Name)
@HiddenFor(m=>m.ElementAt(i.SellIn)
@HiddenFor(m=>m.ElementAt(i).Quality)
}
}
这是返回null的控制器

public ActionResult UpdateQuality(List<Item> Items )
{
    return View("Index", (object)Items);
}   
public ActionResult UpdateQuality(列表项)
{
返回视图(“索引”,“对象”项);
}   

您不能在生成表单控件的
HtmlHelper
方法中使用
ElementAt()
(查看生成的
name
属性-它与您的模型不匹配)

将模型更改为
IList


或者更改使用自定义的
EditorTemplate
作为
项的类型,并在主视图中使用
@Html.EditorFor(m=>m)
为集合中的每个项生成正确的Html。

这现在工作正常。它将我的表格数据发送到控制器,在控制器中执行一些简单的数学运算,然后将更新后的数据返回到视图,并在表格上正确显示。但是,如果再次单击“提交”,它将返回原始表数据,而不是更新的数据。我错过什么了吗?如果您需要更多信息,请告诉我。如果您使用的是自定义模板,我对如何迭代集合有点困惑-m=>m只是将父对象提交到模板?@mattstrower。在您的例子中,您将有一个带有
@model Tnc
@Html.HiddenFor(m=>m.listncid)
等的
/Views/Shared/EditorTemplates/Tnc.cshtml
视图,然后在主视图中使用
@Html.EditorFor(m=>m.Tncs)
为collection@MattThrower. 也许有助于更好地理解它谢谢。现在开始工作了-你帮了我很大的忙,我感谢你的时间和耐心。
@model List<Project.Models.Item>
@for (int i = 0; i < Model.Count; i++)
{
    ....
    @Html.HiddenFor(m => m.[i].Name)
    ....