我试图找出将ISet
(Iesi.Collection
)的第一个元素作为第一个元素的最佳方法。在ASP.NET MVC2中绑定ISet
所以基本上我只需要使用某种类型的集合有一个索引(和ISet
没有),那么我可以写这样的代码(这工作得很好):
<%: Html.EditorFor(x => x.Company.PrimaryUsers[0].Email) %>
但随着ISet没有索引器我无法使用它。
那么我该如何绑定MVC2中ISet的第一个元素?
谢谢,
德米特里。
我试图找出将ISet
(Iesi.Collection
)的第一个元素作为第一个元素的最佳方法。在ASP.NET MVC2中绑定ISet
所以基本上我只需要使用某种类型的集合有一个索引(和ISet
没有),那么我可以写这样的代码(这工作得很好):
<%: Html.EditorFor(x => x.Company.PrimaryUsers[0].Email) %>
但随着ISet没有索引器我无法使用它。
那么我该如何绑定MVC2中ISet的第一个元素?
谢谢,
德米特里。
不幸的是,那些强类型的助手只能与集合的索引器属性一起工作。他们实际上会在语法中寻找开头和结尾的[
]
括号。
可能的解决方法是在您的视图模型类中添加另一个属性,该属性类型为IList
并且将从原始属性填充。在getter中,您只需从原始属性返回一个新列表,并在setter中重新构建原始集合,因为它没有订单的概念。
您可以通过把这事办成如下:
<%
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。
这不会将发布的数据绑定回模型。 – 2010-06-03 02:00:46
听起来不好吗?我不想仅仅为了模型而修改模型,或者在视图中渲染模型。应该存在更好的解决方案。 – 2010-05-03 10:25:44