2010-05-03 42 views
0

我试图找出将ISetIesi.Collection)的第一个元素作为第一个元素的最佳方法。在ASP.NET MVC2中绑定ISet

所以基本上我只需要使用某种类型的集合有一个索引(和ISet没有),那么我可以写这样的代码(这工作得很好):

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

但随着ISet没有索引器我无法使用它。

那么我该如何绑定MVC2中ISet的第一个元素?

谢谢,
德米特里。

回答

1

不幸的是,那些强类型的助手只能与集合的索引器属性一起工作。他们实际上会在语法中寻找开头和结尾的[]括号。

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

+0

听起来不好吗?我不想仅仅为了模型而修改模型,或者在视图中渲染模型。应该存在更好的解决方案。 – 2010-05-03 10:25:44

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

+0

这不会将发布的数据绑定回模型。 – 2010-06-03 02:00:46