我试图找出将ISet
(Iesi.Collection
)的第一个元素绑定为第一个元素的最佳方法。
所以基本上我只需要使用某种带有索引器的集合(而ISet
没有)然后我可以编写这样的代码(效果非常好):
<%: Html.EditorFor(x => x.Company.PrimaryUsers[0].Email) %>
但由于ISet没有索引器,我无法使用它。
那么我怎样才能在MVC2中绑定ISet的第一个元素?
谢谢,
德米特里。
答案 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 。