C # 4.0 Generics и ASP.net MVC - PullRequest
       12

C # 4.0 Generics и ASP.net MVC

1 голос
/ 08 октября 2010

Похоже, что в C # 4.0 спецификаторы дисперсии применимы только к типам интерфейса.

Итак, допустим, у меня есть классы ViewModel / EditModel и простая иерархия моделей.

class MyEditModel<T> where T : Base { ... }
class Derived1 : Base { ... }
class Derived2 : Base { ... }

У меня есть частичное представление, которое принимает MyEditModel любого типа (при условии, что оно является производным от Base), а другое - только экземпляры Derived1.Теперь, как мне отрендерить оба на одной странице?

Частичное представление, которое принимает любую MyEditModel, будет совместно использоваться редактором для Derived1 и редактором для Derived2.

1 Ответ

1 голос
/ 08 октября 2010

Вы можете сделать это только в том случае, если ваше представление принимает модель представления Base. С точки зрения ОО MyEditModel и Derived1 совместно используют Base в качестве общего базового класса - но они больше ничего не разделяют - других отношений нет. Следовательно, если вы пытаетесь использовать то же самое, то это должно быть производным от базы. Предположительно, свойства на базе - единственные, которые у них общие.

Редактировать : Я неправильно истолковал исходный вопрос. Основываясь на буквальном тексте вашего вопроса, я подумал, что вы передаете Derived1, но, опираясь на свой комментарий ниже, вы передаете MyEditModel<Derived1>. Это сделает то, что вы ищете:

Inherits="System.Web.Mvc.ViewPage<dynamic> 

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

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