在ASP.NET MVC2中绑定ISet

时间:2010-05-03 07:47:15

标签: .net asp.net-mvc asp.net-mvc-2 collections binding

我试图找出将ISetIesi.Collection)的第一个元素绑定为第一个元素的最佳方法。

所以基本上我只需要使用某种带有索引器的集合(而ISet没有)然后我可以编写这样的代码(效果非常好):

<%: Html.EditorFor(x => x.Company.PrimaryUsers[0].Email) %>

但由于ISet没有索引器,我无法使用它。

那么我怎样才能在MVC2中绑定ISet的第一个元素?

谢谢,
德米特里。

2 个答案:

答案 0 :(得分:1)

不幸的是,这些强类型帮助程序仅适用于集合的索引器属性。他们实际上会在语法中查找开始和结束[ ]括号。

可能的解决方法是在视图模型类中添加另一个属性为IList的属性,并从原始属性中填充。在getter中,您只需从原始属性返回一个新列表,然后在setter中重建原始集合,因为它没有订单概念。

答案 1 :(得分:0)

您可以通过以下方式解决此问题:

<%
  int i = 0;
  foreach (var element in Model.Company.PrimaryUsers) {
    string htmlFieldName = String.Format("Company.PrimaryUsers[{0}]", i);
    %><%: Html.EditorFor(_ => element, null /* templateName */, htmlFieldName) %><%
    i++;
  }
%>

EditorFor()的这个特殊重载说:“我将向你传递一个模型,但是对模型使用htmlFieldName字符串,而不是试图从表达式推导出它。”在这种情况下,您必须手动跟踪 i