将具有List <t>的ViewModel绑定到特定控件</t>

时间:2014-07-31 18:45:20

标签: c# list html-helper model-binding asp.net-mvc-viewmodel

我有一个包含List的ViewModel。

我见过的例子显示:

  1. 通过迭代所有这些来访问List项目:

    for (var i = 0; i < Model.Compliances.Count; i++)  
    {
        <%=Html.HiddenFor(x => x.Compliances[i].ComplianceId) %>  
        <%=Html.TextBoxFor(x => x.Compliances[i].ComplianceName) %>       
    }
    
  2. 或在列表中指定硬编码位置:

    <%=Html.HiddenFor(x => x.Compliances[2].ComplianceId) %>
    <%=Html.TextBoxFor(x => x.Compliances[2].ComplianceName) %>
    
  3. 我想知道是否有某种方法可以将某个特定的List项绑定到控件上,而不是像ID那样更具体,而不是它恰好在List中的位置?

    感谢您提供任何帮助!

1 个答案:

答案 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/