Изменить тип ViewData в расширенном контроллере - PullRequest
0 голосов
/ 29 мая 2009

Я создал свой собственный базовый класс CustomController, который наследуется от Controller. Аналогичным образом я создал свой собственный CustomViewData, который наследуется от ViewDataDictionary. Класс CustomController имеет ctor, который принимает CustomViewData в качестве параметра.

Все мои контроллеры наследуются от CustomController и передают их наследованные CustomViewData. Теперь я хочу иметь возможность вызывать this.ViewData из моего контроллера и возвращать данные представления, которые я передал в контроллер. В настоящее время я возвращаю ViewDataDictionary (из класса Controller). Поэтому я потерял информацию о типе.

Как я могу сохранить информацию о моем типе в свойстве ViewData в своем производном классе CustomController, не заключая его в get / set, который выполняет для меня бокс?

Ответы [ 2 ]

1 голос
/ 01 июня 2009

Свойство ViewData определено в классе ControllerBase, и вы не можете переопределить его, но вы можете сделать это:

public class CustomController : Controller {

    public new CustomViewData ViewData { get; set; }

}

Но будьте осторожны, если вы обращаетесь к экземпляру CustomController, подобному этому

Controller c = myCustomControllerInstance;
CustomViewData cvd = c.ViewData;

ваш код не будет компилироваться, так как вы будете использовать реализацию свойства ViewData по умолчанию, и он вернет экземпляр ViewDataDictionary.

0 голосов
/ 02 июня 2009

Я пробовал несколько способов достичь своей цели, но, похоже, ни один из них не сработал, за исключением этого уродливого решения, которое, как я знал, существовало, но ... ну, некрасиво.
Я в основном упаковываю бокс / распаковываю в get / set. Я должен делать это на протяжении всей цепочки классов. Так что мой CommonController делает это с экземпляром CommonViewData, а мой AbcController: CommonController делает это из AbcViewData: CommonViewData в CommonViewData и т. Д. Пока я не найду лучшее решение, мне придется пойти с этим.

public new AbcViewData ViewData { 
    get { return base.ViewData as [bcViewData; }
    set { base.ViewData = value; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...