2010-05-03 84 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