2016-07-26 64 views
0

我使用MVC 5.外讓我們假設我有一個包含集合的視圖模型,就像這樣:LINQ到集合中的特定項目綁定@foreach

public class MyViewModel 
{ 
    public ICollection<MyItem> MyItems { get; set; } 
} 

在看來,我希望能夠創建一個輸入領域的具體使用LINQ表達式這個系列的AA某些項目,如:

@Html.TextBoxFor(x => x.MyItems.First(y => y.Name == "Hello").Id) 

此代碼是無效的,當然,但我有辦法可以達到相同的結果,也許創建一個自定義的HtmlHelper?

+2

怎麼樣在你的視圖模型與創建第二個屬性getter as x.MyItems.First(y => y.Name ==「Hello」)。並嘗試綁定到視圖 – Fran

+0

您可能還可以將'MyItems'作爲自定義'DataType'裝飾,並提供'EditorTemplate'來處理集合。一個定製的幫手也應該工作 – Eonasdan

+0

@Fran我對這種方法很感興趣,但是你能否詳細說明一下嗎?也許有一個簡單的例子?我不能讓它自己工作。 – tocqueville

回答

1

一種方式做到這一點是改變ICollection<MyItem>IList<MyItem>,然後在您的視圖:

var myItemIndex = Model.MyItems.IndexOf(Model.MyItems.First(y => y.Name == "Hello")); 
@Html.TextBoxFor(x => x.MyItems[myItemIndex].Id) 
1

我想我明白你在做什麼,但是從你原來的文章中並不清楚。爲什麼不把完整列表發送到視圖,只是迭代列表中的所有項目,然後按照你想要的方式綁定每個項目。這是一個古老的鏈接,可以爲你工作haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx