带有For循环内部表单的MVC视图提交空模型

时间:2016-07-20 23:15:03

标签: c# asp.net-mvc razor asp.net-mvc-5

我在这里看到了几个非常相似的帖子,关于迭代模型列表并在每次迭代中创建一个表单,但没有任何东西让我成功回复填充的模型。

我的目标是为模型的每次迭代提供一个内联表单,并允许用户在提交相关表单时进行更改并保存该特定模型的编辑。我仍然是ASP.NET MVC的新手,所以如果有更好的方法,请随时提供建议。

提前感谢您对此的任何帮助!

查看

return

控制器

@model List<POSGuys.Option>

@{
    var options = Model.OrderBy(i => i.OptionEndOfLife).ToList();
}

@for (int i = 0; i < options.Count(); i++)
{
    using (Html.BeginForm("Save", "Option", FormMethod.Post ))
    {
        <tr style="@(options[i].OptionEndOfLife ? "color:#777" : "")">
            @Html.HiddenFor(model => options[i].OptionID)
            <td>@options[i].ItemNumber</td>
            <td width="100"><img @Html.Raw(POSGuys.Controllers.Shims.Resize("/content/images/catalog/" + options[i].image, 200, 200, rescale: 2)) /></td>
            <td>@Html.EditorFor(model => options[i].OptionName)</td>
            <td>@Html.EditorFor(model => options[i].PGPrice)</td>
            <td>@Html.EditorFor(model => options[i].OptionsMSRP)</td>
            <td>@Html.EditorFor(model => options[i].Cost)</td>
            <td>@Html.EditorFor(model => options[i].Description)</td>
            <td>@Html.EditorFor(model => options[i].Rank)</td>
            <td>@Html.EditorFor(model => options[i].Standard)</td>
            <td><input type="submit" value="Save" class="btn btn-warning" /></td>
        </tr>
    }
}

2 个答案:

答案 0 :(得分:4)

您只需要确保您的代码生成的输入字段的名称值与Option类的属性名称相同,并且模型绑定将起作用。

@for (int i = 0; i < options.Count(); i++)
{
    using (Html.BeginForm("Save", "Option", FormMethod.Post))
    {

        @Html.EditorFor(model => options[i].OptionName,null,"OptionName")
        @Html.EditorFor(model => options[i].PGPrice,null, "PGPrice")
        <input type="submit" />
        <br />  
    }
}

现在,当您提交表单时,默认模型绑定器将能够将表单字段值映射到Option类对象的属性。

答案 1 :(得分:1)

更简单的解决方案-创建局部视图。 如果您的主视图为“列表”,则您的局部视图应该只是“模型”,并且一切将按应有的方式工作。