我試圖找出將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