快速刷新.
什么时候:
IEnumerable<T>Html.EditorFor()使用仅接受lambda表达式的重载T在Views/Shared/EditorTemplates下有一个类型的编辑器模板然后MVC引擎将自动为可枚举序列中的每个项调用编辑器模板,生成结果列表.
例如,当存在Order具有属性的模型类时Lines:
public class Order
{
public IEnumerable<OrderLine> Lines { get; set; }
}
public class OrderLine
{
public string Prop1 { get; set; }
public int Prop2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并且有一个视图Views/Shared/EditorTemplates/OrderLine.cshtml:
@model TestEditorFor.Models.OrderLine
@Html.EditorFor(m => m.Prop1)
@Html.EditorFor(m => m.Prop2)
Run Code Online (Sandbox Code Playgroud)
然后,当您@Html.EditorFor(m => m.Lines)从顶级视图调用时,您将获得一个页面,其中包含每个订单行的文本框,而不仅仅是一个.
但是,正如您在链接问题中看到的那样,这仅在您使用特定的重载时才有效EditorFor.如果您提供模板名称(为了使用未在OrderLine类之后命名的模板),则不会发生自动序列处理,而是会发生运行时错误.
此时,您必须将自定义模板的模型声明为IEnumebrable<OrderLine>并以某种方式手动迭代其项目以输出所有这些项目,例如
@foreach (var line in Model.Lines) {
@Html.EditorFor(m …Run Code Online (Sandbox Code Playgroud)