假設我有一個簡單的模型來解釋的目的:EditorFor IEnumerable的<T>與TEMPLATENAME
public class Category
{
...
public IEnumerable<Product> Products { get; set; }
}
查看:
@model Category
...
<ul>
@Html.EditorFor(m => m.Products)
</ul>
EditorTemplate:
@model Product
...
<li>
@Html.EditorFor(m => m.Name)
</li>
請注意,我不必須爲IEnumerable<Product>
定義EditorTemplate,我只能爲創建它模型和MVC框架足夠聰明,可以使用IEnumerable自己的模板。它遍歷我的集合並調用我的EditorTemplate。
輸出的HTML將是這樣的
...
<li>
<input id="Products_i_Name" name="Products[i].Name" type="text" value="SomeName">
</li>
,我可以畢竟張貼到我控制器。
但是爲什麼當我使用模板名稱定義EditorTemplate時,MVC不會訣竅?
@Html.EditorFor(m => m.Products, "ProductTemplate")
在這種情況下,我必須爲屬性的類型更改爲,我自己通過收集迭代,並調用EditorTemplate
@for (int i = 0; i < Model.Products.Count; i++)
{
@Html.EditorFor(m => m.Products[i], "ProductTemplate")
}
這似乎有點髒的解決方法給我。這是乾淨的解決方案嗎?
可能重複http://stackoverflow.com/questions/25333332/correct-idiomatic-way-to-use -custom-editor-templates-with-ienumerable-models-in) – GSerg
不知道我在創建[那個問題]之前搜索時錯過了這個問題(http://stackoverflow.com/questions/25333332/correct-idiomatic-way- )使用自定義編輯器模板與ienumerable-models-in)。按照時間順序,我的問題應該作爲這個問題的重複來解決,但我相信它應該是相反的,因爲畢竟有一個解決方法。 – GSerg
@GSerg,感謝您分享您的答案。我不能說我喜歡任何建議的解決方法,而不是通過集合中的簡單'for'循環。對不起,我不清楚我的問題,但我沒有尋找這個問題的解決方法,但對於乾淨和(我希望)唯一正確的方式來實現這一點。這就是爲什麼我不能說你的問題的答案解決了我的問題,儘管問題本身非常相似。 – Zabavsky