0

我有一个Form填充了一些类似网格的结构CheckBoxesDisplayField。我想用Checked CheckBoxes. 问题是我在Controller's post方法中得到了空值。
楷模

public class RegisterModuleSelection 
{
    [Display(Name = "ID")]
    public int mID { get; set; }

    [Display(Name = "Module")]
    public string Module { get; set; }

    [Display(Name = "Buy")]
    public bool Buy { get; set; }        
}

看法

@model IEnumerable<MAK_ERP.Models.RegisterModuleSelection>
@{
ViewBag.Title = "Register - Modules Selection";}
<h2>
Register - Modules Selection</h2>
@using (Html.BeginForm("RegisterModules", "UserAccount", FormMethod.Post, new { id = "RegisterModules", @class = "generalForm" }))
{
<table class="Grid Module">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Module)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Price)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Duration) (Months)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Buy)
        </th>
    </tr>
    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.HiddenFor(modelItem => item.mID)
                @Html.DisplayFor(modelItem => item.Module)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Price)
            </td>
            <td>
                @Html.EditorFor(modelItem => item.Duration)
            </td>
            <td>
                @Html.CheckBoxFor(modelItem => item.Buy)
            </td>
        </tr>
    }
    <tr>
        <td colspan="4">
            <input type="submit" value="Next" class="button3" />
            <input type="reset" value="Reset" class="button4" />
        </td>
    </tr>
</table>
}

控制器

   [HttpGet]
    public ActionResult RegisterModules()
    {
        IEnumerable<MAK_ERP.Models.RegisterModuleSelection> model = reg.getModules();
        return View(model);
    }
    [HttpPost]
    public ActionResult RegisterModules(IEnumerable<Models.RegisterModuleSelection> regMod)
    {
    //regMod is null here
    ...
4

2 回答 2

2

不幸的是,您不能以这种方式绑定。Model binding depends upon how generated html looks like.在这种特殊情况下,它应该类似于:

<input id="item_Buy" type="checkbox" value="true" name="item[0].Buy" checked="checked">

如果您对一些变通方法没问题,您可以使用 for 循环而不是 foreach 循环,您可以在其中为每个控件名称添加索引,并且模型绑定器可以正确绑定它们。

有一些非常有用的讨论可用,您可以在这里查看:ASP.NET MVC - 使用 IEnumerable 模型插入或更新视图。还有模型绑定到列表。另一个是:Modelbinding IEnumerable in ASP.NET MVC POST?

于 2013-09-08T19:09:33.327 回答
0

你应该用它EditorTemplates来解决问题。

ASP.NET MVC Multiple Checkboxes中接受的答案会对您有所帮助。

于 2013-09-08T19:23:28.407 回答