MVC 3 - 模型 在表中绑定列表,其中每条记录是一列而不是一行



我可以找到有关如何在 MVC 3 中对项目列表进行建模绑定的各种文章,甚至可以在表中,但在每个示例中,行表示列表中的一条记录。 我的观点的要求是每条记录必须是一列。 我无法从以下文章中获得任何技巧:

http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/http://dotnetslackers.com/articles/aspnet/Understanding-ASP-NET-MVC-Model-Binding.aspx#s8-binding-with-a-list-of-class-types

这是我观点的相关部分:

    <table>
        <thead>
            <tr>
                <th>Name</th>
@foreach (var fact in Model.Facts)
{
                <th>@fact.Name</th>
}
            </tr>
        </thead>
        <tr>
            <td>Value</td>
@foreach (var fact in Model.Facts)
{
            <td>@Html.TextBox("Value" + fact.FactID.ToString(), fact.Value)</td>
}
        </tr>
        <tr>
            <td>Sample</td>
@foreach (var fact in Model.Facts)
{
            <td>@Html.TextBox("Sample" + fact.FactID.ToString(), fact.Sample)</td>
}
        </tr>
        <tr>
            <td>Default?</td>
@foreach (var fact in Model.Facts)
{
            <td>@Html.RadioButton("Default", fact.FactID, fact.Default)</td>
}
        </tr>
        <tr>
            <td></td>
@foreach (var fact in Model.Facts)
{
            <td>@Html.ActionLink("Detail", "Details", "Fact", new { id = fact.FactID }, null)</td>
}
        </tr>
    </table>

在表单的后期操作方法中,我接受一个表单集合,我正在手动从中提取数据。 相反,我想接受一个 IList 集合,让 MVC 模型活页夹为我解决所有问题。

这是我的控制器操作:

[HttpPost]
[Authorize]
public RedirectToRouteResult Facts(FormCollection form)
{
    int factListId = int.Parse(form["FactListID"]);
    FactList factList = Repository.Find(factListId);
    int defaultId = int.Parse(form["Default"]);
    foreach (Fact fact in factList.Facts)
    {
        string factId = fact.FactID.ToString();
        string toParse = form["Value" + factId];
        fact.Value = toParse.Length == 0 ? null : new Nullable<double>(double.Parse(toParse));
        fact.TextValue = form["Value" + factId];
        toParse = form["Sample" + factId];
        fact.Sample = toParse.Length == 0 ? null : new Nullable<int>(int.Parse(toParse));
        fact.Default = (fact.FactID == defaultId);
    }
    Repository.Save();
    return RedirectToAction("Index");
}

有人有东西可以指出我正确的方向吗? 我想那里有信息,但我只是无法在有关如何做到这一点的大量信息中找到它,每条记录方式更"标准"的一行。

谢谢

如果你有一个IList,那么做这样的事情应该可以。如果您通过数字索引生成输入,则为 MVC 提供足够的信息以在发布时绑定它们。

@for (int i = 0; i< Model.Facts.Count(); i++)
{
      <td>@Html.TextBoxFor(m => m.Facts[i].Value)</td>
}
<--! Do other fields the same way -->

控制器发布操作应接受与视图模型类型相同的参数。然后,您应该看到事实 IList 已正确绑定。

最新更新