如果为接口命名,则不会渲染MVC DisplayTemplate

时间:2019-05-16 23:31:27

标签: c# model-view-controller display-templates

我有一个模特:

public class Dog: IPet
{
    // IPet Implementation
    public string Name { get; set; }
}

DisplayTemplates/Dog.cshtml

中的DisplayTemplate
@model IPet // note this is the interface, not the concrete Dog
<label>@Model.Name</label>

这非常有效,直到我将文件重命名为IPet.cshtml为止;然后绑定失败。我想对DogCatRatGoatGnu使用相同的DisplayTemplate,它们都是IPet的实现。

如何使绑定生效?

1 个答案:

答案 0 :(得分:2)

默认情况下,视图的名称是传递给template-helper的对象类型的名称。因此需要明确定义模板名称:

@Html.DisplayFor(x => x.Dog, "IPet")

当需要渲染包含 IPet 实例的模型时,请使用UIHint属性:

public partial class Zoo
{
    [UIHint("IPet")]
    public Dog Dog;

}

模板:

@model Zoo
@Html.DisplayForModel()