在For循环中具有表单的MVC视图提交空模型

本文关键字:视图 MVC 提交 模型 表单 循环 For | 更新日期: 2023-09-27 17:58:01

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

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

提前感谢您的帮助!

查看

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

控制器

[HttpPost]
public ActionResult Save(Option option)
{
    var opt = StoreDatabase.Options.Find(option.OptionID);
    if (opt != null)
    {
        StoreDatabase.Entry(opt).CurrentValues.SetValues(option);
        StoreDatabase.SaveChanges();
    }
    return RedirectToAction("EditList", option.ProductID);
}

在For循环中具有表单的MVC视图提交空模型

您只需要确保您的代码生成的输入字段的name值与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类对象的属性。

更简单的解决方案-创建部分视图。如果你的主视图是List,那么你的分部视图应该只是Model,一切都会像它应该的那样工作。