假设我有一个简单的模型来解释这个目的:
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,我只能为Product
模型创建它,并且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")
在这种情况下,我必须将属性的类型更改为IList<Product>
,自己迭代集合并调用EditorTemplate
@for (int i = 0; i < Model.Products.Count; i++)
{
@Html.EditorFor(m => m.Products[i], "ProductTemplate")
}
在我看来,这是一种肮脏的变通方法。有没有其他更干净的解决方案来做到这一点?
https://stackoverflow.com/questions/14038392
复制相似问题