从Parent调用子EditorTemplates

时间:2012-07-24 12:39:54

标签: asp.net-mvc asp.net-mvc-3 razor model editorformodel

假设我有一个简单的模型:

public Vehicle {
    public int year;
}

我还有另一种模式:

public Car : Vehicle {
    public string make;
}

我有一个EditorTemplate for Vehicle,可以让你设定年份。它存储在Views / Shared / EditorTemplates:

@model Vehicle
Year: @Html.EditorFor(m => m.year)

我想为Car调用EditorTemplate for Vehicle创建一个EditorTemplate,同时还增加了设置make的功能。我的想法是,如果我决定向Vehicle添加更多属性,我只需要更改Vehicle编辑器模板。我的汽车编辑器模板不必更改。

我原本以为这样的事情会起作用:

@model Car
@Html.EditorForModel("Vehicle")
Make: @Html.EditorFor(m => m.make)

......但无论出于何种原因,它都没有。我的观点很简单:

@model Vehicle
@Html.EditorForModel()

当我传入Car模型时,该视图最终会调用我的Car模板,因此可行。但唯一显示的是make的编辑器。一年没什么。因此,行@Html.EditorForModel("Vehicle")似乎根本不做任何事情。它不会调用Vehicle EditorTemplate。

有什么想法吗?这些都是/ Views / Shared / EditorTemplates中的editortemplate,我想知道它是否与它有关。我尝试了@Html.EditorForModel("~/Views/Shared/EditorTemplates/Vehicle"),并附加了一个.cshtml,但都没有效果。

1 个答案:

答案 0 :(得分:0)

至少有一个解决方法。我改变了观点:

@model Vehicle
@Html.EditorForModel("Vehicle")
@Html.EditorForModel()

这没关系。它调用Vehicle EditorTemplate,然后调用Car EditorTemplate。不理想,因为它意味着我使用车辆/汽车的每个视图都需要这样做。但至少它有效。

但为什么不能从其他EditorTemplate调用EditorTemplate?这对我来说感觉像个错误......