Шаблон отображения ASP.NET MVC для универсального типа - PullRequest
3 голосов
/ 26 декабря 2010

Я пытаюсь использовать модель ListModel в качестве общей модели списка.Я хотел бы ввести на странице

@Html.DisplayForModel()

Однако MVC неправильно находит шаблонный файл "ListModel.cshtml".Это должно работать по-другому для универсальных моделей.Как мне назвать шаблонный файл, чтобы он правильно находился?

public class ListModel<T>
{
public IEnumerable<T> Models { get; set; }
public string NextPage { get; set; }
}

Я ожидал бы, что он будет искать Shared/DisplayTemplates/ListModel.ascx, но это не так.Кто-нибудь знает?

Редактировать:

В итоге я решил эту проблему, просто удалив общий параметр, подобный так.Я действительно хочу знать, если вы все еще можете иметь общее имя файла, хотя.

public class ListModel
{
    public IEnumerable Models {get;set;}
    public string NextPage {get;set;}
}

Ответы [ 3 ]

1 голос
/ 02 мая 2011

В качестве обходного пути, не могли бы вы украсить класс ListModel<T> атрибутом UIHint, чтобы заставить его использовать нужный шаблон?

Например,

[UIHint("ListModel")]
public class ListModel<T>
{
...
1 голос
/ 26 декабря 2010

Я не думаю, что это возможно.

Подумайте об этом: если бы вы каким-то образом смогли объявить шаблон как общий (скажем, назвав его ListModel`1.ascx или как-то еще), как бы MVCво время выполнения обрабатывать какие-либо конкретные экземпляры модели?И как бы вы отобразили общие свойства / поля в шаблоне?

Я не смог найти место, где MS специально заявляет, что универсальные модели запрещены, но я не вижу, как они будут делатьэто работает.

Это также подтверждается наблюдением, что если вы попытаетесь создать строго типизированное представление, то универсальные классы будут отфильтрованы из выпадающего списка.

0 голосов
/ 17 марта 2016

Вы можете явно указать свой шаблон, тогда MVC найдет его как обычно.

@Html.DisplayForModel("ListModel")

и аналогично

@Html.DisplayFor(m=>m.AProperty,"TemplateName")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...