2011-12-28 67 views
2

如何在不使用循環的情況下訪問IEnumerable類型的Razor視圖中的Model屬性(如@Html.EditorFor(x=>Model.Name))I.e如果某個視圖強制類型化爲某個Model保持模型作爲LIST。例如:
如何訪問IEnumerable類型的剃刀視圖中的模型屬性?

@model IEnumerable<EFTest2.DAL.package_master> 


然後是能夠顯示TestBoxFor或EditorFor不使用foreach循環(以創建新的模型)HTML幫手。???

+0

你仍然需要遍歷所有的集合,因此它被稱爲「列表」。 – IamStalker 2011-12-28 05:34:40

+0

只有當你在很多地方使用時,你纔可以編寫自己的擴展方法(用於HTML)來吐出html – Anand 2011-12-28 08:07:18

回答

2

當某些模型屬性的類型爲IEnumerable<SomeType>時,通常會定義一個編輯器/顯示模板(~/Views/Shared/EditorTemplates/SomeType.cshtml~/Views/Shared/DisplayTemplates/SomeType.cshtml)。這個模板將自動呈現的集合中的每個元素,這樣你就不需要寫循環:

@Html.EditorFor(x => x.SomeCollection) 

,並在模板中,你將能夠訪問各個屬性:

@model SomeType 
@Html.EditorFor(x => x.Name) 
... 

現在,如果您絕對需要直接訪問強類型爲IEnumerable<SomeType>的視圖中的某個元素,則最好使用其他集合類型,例如IList<SomeType>SomeType[]作爲視圖模型,這將允許您按索引直接訪問元素,並且您將能夠做到這一點,例如訪問第六屆eleme收集的NT:

@model IList<SomeType> 
@Html.EditorFor(x => x[5].Name) 
0

所以基本上你提的類型列表等

如果你想要將其值添加到列表中接受來自用戶從表單字段輸入,然後添加到現有列表模型。最簡單但不那麼優雅的方式將是

假設你有類「Person」,然後列出你的模型。首先創建一個將有空人實例的人的實例,將其添加到列表中,然後將最後一個列表項綁定到您的編輯。

@{ 
    Person contact = new Person(); //Empty person instance 
    PersonList.Add(contact); 
    } 

以後綁定給你的induvidual領域

@Html.TextBoxFor(m => m.PersonList[PersonList.Count - 1].PrimaryContacts.FirstName) 

這對驗證工作良好的模特屬性每一個表單提交的孔和後也,未來列入你只需要添加新的人。 但如果表單被取消,請小心編寫刪除代碼。

相關問題