Общий базовый вид ASP.NET MVC - PullRequest
       17

Общий базовый вид ASP.NET MVC

10 голосов
/ 05 февраля 2010

У меня может быть базовый класс для представлений в проекте MVC, например:

public class BaseViewPage : System.Web.Mvc.ViewPage
{
  public string Something { get; set; }
}

И тогда в ASPX я могу сделать это:

<%@ Page Something="foo" Language="C#" Inherits="MyNamespace.BaseViewPage" %>

Это отлично работает; проблема в том, когда я пытаюсь сделать то же самое с общей версией:

public class BaseViewPage<TModel> : 
    System.Web.Mvc.ViewPage<TModel> where TModel : class
{
  public string Something { get; set; }
}

Когда я пытаюсь использовать это из ASPX, вот так:

<%@ Page Something="foo" Language="C#" 
    Inherits="MyNamespace.BaseViewPage<SomeClass>" %>

Я получаю сообщение об ошибке:

Ошибка синтаксического анализа атрибута «что-то»: тип «System.Web.Mvc.ViewPage» не имеет открытого свойства с именем «что-то».

Обратите внимание, как он пытается использовать System.Web.Mvc.ViewPage, а не мой класс BaseViewPage. Чтобы сделать его более интересным, если я удаляю атрибут «Something» из директивы Page и помещаю некоторый код в общую версию BaseViewPage (например, OnInit), класс фактически называется / used / instantiated.

Итак, я делаю что-то не так или это ограничение / ошибка? Спасибо.

1 Ответ

7 голосов
/ 05 февраля 2010

У меня был точно такой же вопрос несколько месяцев назад. Сводил меня с ума, пока Джастин Грант не ответил здесь.

...