【问题标题】:@Html.HiddenFor returning null value@Html.HiddenFor 返回空值
【发布时间】:2015-11-07 20:15:11
【问题描述】:

我正在尝试将表的结果返回给控制器以进行进一步操作。一旦返回到控制器,该值将显示为 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>
}

这里是返回 null 的控制器。

public ActionResult UpdateQuality(List<Item> Items )
{
    return View("Index", (object)Items);
}   

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

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

    要么将模型更改为IList&lt;T&gt;

    @model List<Project.Models.Item>
    

    并使用for 循环

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

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

    【讨论】:

    • 嘿,斯蒂芬,现在工作正常。它将我的表数据发送到执行一些简单数学运算的控制器,然后将更新后的数据返回到视图并正确显示在表上。但是,如果我再次单击提交,它将返回原始表数据而不是更新的数据。我错过了什么吗?如果您需要更多信息,请告诉我。
    • 如果您使用的是自定义模板,我对您如何迭代集合有点困惑 - m => m 只是将父对象提交给模板?
    • @MattThrower。在您的情况下based on you previous question 您将有一个带有@model Tnc@Html.HiddenFor(m =&gt; m.ListTncId) 等的/Views/Shared/EditorTemplates/Tnc.cshtml 视图,然后在主视图中您将使用@Html.EditorFor(m =&gt; m.Tncs) 为集合中的每个项目生成html
    • @MattThrower。 this answer 可能有助于更好地理解它
    • 谢谢。现在开始工作了 - 您非常乐于助人,感谢您的时间和耐心。
    猜你喜欢
    • 1970-01-01
    • 2012-08-28
    • 2021-07-07
    • 2014-01-31
    • 1970-01-01
    • 2021-12-21
    相关资源
    最近更新 更多