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

Ell*_*rks 1 c# asp.net-mvc razor asp.net-mvc-5

我在这里看到了一些非常相似的帖子,内容涉及迭代模型列表并在每次迭代中创建一个表单,但没有任何内容让我成功地 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>
    }
}
Run Code Online (Sandbox Code Playgroud)

控制器

[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);
}
Run Code Online (Sandbox Code Playgroud)

Shy*_*yju 5

您只需要确保您的代码生成的输入字段的名称值与 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 />  
    }
}
Run Code Online (Sandbox Code Playgroud)

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