Использование универсальной модели в ASP.NET MVC Razor - PullRequest
48 голосов
/ 20 апреля 2011

Можно ли использовать универсальную модель в ASP.NET MVC 3 (с Razor)?Сбой синтаксической ошибки:

@model DtoViewModel<T> where T : IDto

Ответы [ 5 ]

26 голосов
/ 04 сентября 2011

, учитывая, что @model ожидает тип, а не объявление типа, которое вы можете использовать:

@model DtoViewModel<IDto>

и использовать универсальную ковариацию

21 голосов
/ 21 апреля 2011

Такой синтаксис не поддерживается Razor, извините.

6 голосов
/ 31 июля 2014

Предполагая, что вы хотите использовать универсальный тип, чтобы избежать дублирования кода в каждом представлении ViewModel<T>, вы можете сделать это следующим образом:

1. создать представление длячасти ViewModel<T>, которые являются уникальными для представления

ModelView.cshtml :

@model ViewModel<specificType>

@{Layout = "~/Views/Shared/Layout.cshtml";}
<h2 class="sub-header">Specific type view</h2>

2. создают представление дляобщие части, которые должны отображаться в каждом представлении <T>

Grid.cshtml :

@{ var webGrid = new WebGrid(Model.PageItems); }

<div class="row" style="overflow: auto">
    @webGrid.GetHtml("table-striped", mode: WebGridPagerModes.All, firstText: "First", lastText: "Last")
</div>

Поскольку это частичное представление, вам не нужноснова объявить тип Model.Он просто будет использовать модель, которую вы определили в родительском представлении, которое ее отображает.Свойство IList<T> PageItems вашей модели будет строго напечатано с <specificType>.

3 .Не забудьте визуализировать частичное представление ваших общих частей

ModelView.cshtml :

@RenderPage("~/Views/Shared/Grid.cshtml")
1 голос
/ 30 июля 2018

Я нашел эту ветку и покопался.Похоже, что функция находится в отставании 2.2.0 .Если кто-то хочет принять участие, вы можете проверить проблему на Github.https://github.com/aspnet/Mvc/issues/7152

0 голосов
/ 12 августа 2016

Это не идеально, но это работает и может стать довольно креативным с этим шаблоном.

@model YourNameSpace.MyModel


public MyModel
{
    public MyGenericType<string> ModelAStuff {get;set;}
    public MyGenericType<int> ModelBStuff {get;set;}
    public MyGenericType<DateTime> ModelCStuff {get;set;}
}

public class MyGenericType<T>
{
  //use T how ever you like
  public T Color {get;set;}
  public T Year  {get;set;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...