我有一个包含List的ViewModel。
我见过的例子显示:
通过迭代所有这些来访问List项目:
for (var i = 0; i < Model.Compliances.Count; i++)
{
<%=Html.HiddenFor(x => x.Compliances[i].ComplianceId) %>
<%=Html.TextBoxFor(x => x.Compliances[i].ComplianceName) %>
}
或在列表中指定硬编码位置:
<%=Html.HiddenFor(x => x.Compliances[2].ComplianceId) %>
<%=Html.TextBoxFor(x => x.Compliances[2].ComplianceName) %>
我想知道是否有某种方法可以将某个特定的List项绑定到控件上,而不是像ID那样更具体,而不是它恰好在List中的位置?
感谢您提供任何帮助!
答案 0 :(得分:2)
您陷入了WebForms术语。
这些被称为Html助手,而不是控件。这些助手呈现HTML而不是&#34; bind&#34;你想到的任何意义上的东西。他们称之为帮助者,因为他们只是帮助以正确的方式格式化数据。
帮助者使用特定索引的原因是因为表单何时发布回服务器,它们必须在基于0的表单上编制索引,以便模型绑定器可以发现它们并重新创建模型。它通过两个方面来实现,即名称和索引,而不是id或其他任何值。
因此,如果你想要一个列表在回发上绑定,那么它必须是一个基于0的索引......或者它必须使用&#34;索引&#34;值,如&#34;非顺序索引&#34;本文的一部分:
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/