MVC DisplayTemplate не отображается, если указан для интерфейса - PullRequest
0 голосов
/ 17 мая 2019

У меня есть модель:

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

и шаблон отображения в DisplayTemplates/Dog.cshtml

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

Это прекрасно работает, пока я не переименую файл в IPet.cshtml; тогда связывание не выполняется. Я хочу использовать один и тот же DisplayTemplate для Dog, Cat, Rat, Goat и Gnu, которые являются реализациями IPet.

Как я могу получить привязку к работе?

1 Ответ

2 голосов
/ 17 мая 2019

По умолчанию имя представления - это имя типа объекта, которое передается шаблону-помощнику. Поэтому необходимо явно определить имя шаблона:

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

При необходимости визуализации модели, содержащей IPet , экземпляры используют UIHint -атрибут:

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

}

Шаблон:

@model Zoo
@Html.DisplayForModel()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...