1

我们有一个 vert complex 模型,其中包含大约 3 或 4 个嵌套集合。我们从部分调用中提取的许多数据在使用编辑器模板时基于 ID 为 0,因此名称和 ID 在我们的视图中重复。我想我们可以使用 jQuery 来改变这一点,但我们正在为每个循环使用它们,同时构建我们自己的 ID 和名称。显然,这将破坏模型绑定器。

我做了一些研究,似乎我可以使用 for 循环和 0-base 我的 ID 和表单字段名称(如何在 mvc4 razor 中显示验证消息)。但是让客户端和服务器记住最后使用的数字可能是不可靠的。所以我的问题是,名称和 ID 是否必须基于 0,或者它们可以简单地是唯一的?我宁愿使用项目的唯一 ID 而不是迭代的索引。例如,我可以修改以下内容并在 Html 元素对象中添加自己的 ID 和名称吗?在这个列表中,我可以模仿使用 editorFor 生成的输出并维护验证和绑定吗?

@for (var i = 0; i < Model.UsersOfList.Count; i++)
{
   <li>
   @Html.TextBoxFor(m.UsersOfList[i].LoginName, new {@class="textbox_LoginInfoAndPermission"})
   @Html.ValidationMessageFor(m => m.UsersOfList[i].LoginName)

   @Html.TextBoxFor(m.UsersOfList[i].UserName, new {@class="textbox_LoginInfoAndPermission"})
   @Html.ValidationMessageFor(m => m.UsersOfList[i].UserName)
   </li>
}
4

1 回答 1

0

我相信您指的是非顺序索引绑定,它允许使用任意 ID 代替从零开始的顺序整数。

示例(来自链接文章):

<form method="post" action="/Home/Create">

    <input type="hidden" name="products.Index" value="cold" />
    <input type="text" name="products[cold].Name" value="Beer" />
    <input type="text" name="products[cold].Price" value="7.32" />

    <input type="hidden" name="products.Index" value="123" />
    <input type="text" name="products[123].Name" value="Chips" />
    <input type="text" name="products[123].Price" value="2.23" />

    <input type="hidden" name="products.Index" value="caliente" />
    <input type="text" name="products[caliente].Name" value="Salsa" />
    <input type="text" name="products[caliente].Price" value="1.23" />

    <input type="submit" />
</form>

这允许您在不维护索引的情况下随意添加/删除项目。它还允许您在请求中使用非整数值。每个项目确实需要一个额外的隐藏字段;这允许模型绑定器“看到”它,并且模型将从发布到控制器的数据中正确实例化。

于 2013-05-11T18:00:31.587 回答