0

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

public Vehicle {
    public int year;
}

我有另一个模型从那延伸出来:

public Car : Vehicle {
    public string make;
}

我有一个用于车辆的 EditorTemplate,可让您设置年份。它存储在 Views/Shared/EditorTemplates 中:

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

我想为调用车辆的 EditorTemplate 的汽车创建一个 EditorTemplate,但还增加了设置品牌的能力。这个想法是,如果我决定向 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 中的编辑器模板,我想知道这是否与它有关。我尝试@Html.EditorForModel("~/Views/Shared/EditorTemplates/Vehicle")了,并在其上附加了一个 .cshtml,但都没有奏效。

4

1 回答 1

0

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

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

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

但是为什么它不能从另一个 EditorTemplate 中调用一个 EditorTemplate 呢?对我来说,这感觉就像一个错误......

于 2012-07-25T13:27:55.133 回答