@ Html.HiddenFor返回null值

时间:2017-07-29 00:50:37

标签: asp.net-mvc

我试图将表的结果返回给控制器以进行进一步操作。一旦返回到控制器,该值显示为null。在过去,我已经能够使用@ Html.HiddenFor来返回值,但它似乎在这个实例中不起作用。不知道我在这里做错了什么。任何帮助是极大的赞赏。

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" />
<link href="\stylesheet.css" rel="stylesheet" />

<html>

<head>
  <title>Lizzy McGuire, an Evolution</title>
</head>

<div class="container">
  <div class="jumbotron">

    <body>
      <h1 style="jumbotron-h1" class="text-center">Hey now, hey now.</h1>
    </body>
  </div>
</div>

</html>

这是控制器返回null。

@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>
}

1 个答案:

答案 0 :(得分:3)

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

将模型更改为IList<T>

@model List<Project.Models.Item>

并使用for循环

@for (int i = 0; i < Model.Count; i++)
{
    ....
    @Html.HiddenFor(m => m.[i].Name)
    ....

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