首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有TemplateName的EditorFor IEnumerable<T>

带有TemplateName的EditorFor IEnumerable<T>
EN

Stack Overflow用户
提问于 2012-12-26 17:17:55
回答 2查看 11.6K关注 0票数 21

假设我有一个简单的模型来解释这个目的:

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")
}

在我看来,这是一种肮脏的变通方法。有没有其他更干净的解决方案来做到这一点?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14038392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档