MVC 3 - 模型绑定列表,表中的每个记录是一列而不是行(MVC 3 - Model Bindi

2019-07-29 17:36发布

我可以找到有关如何建模,绑定的物品清单在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-模型Binding.aspx#S8结合上带有一个列表的一流类型

这是我的观点的培训相关的部分:

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

在窗体后动作方法,我接受其中我拉数据出手动一个的FormCollection。 相反,我愿意接受一个I​​List集合,让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");
}

任何人得到的东西点我在正确的方向? 我想有信息在那里,但我不能在信息有关如何执行每个记录方式这更“标准” 1排体积庞大的找到它。

谢谢

Answer 1:

如果你有一个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已正确绑定。



文章来源: MVC 3 - Model Binding a list in a table with each record being a column instead of row