Мне кажется, я знаю, что является причиной проблемы ...
Определение метода получения свойства Html
:
public static HtmlHelper Html {
get {
WebPage currentWebPage = CurrentPage as WebPage;
if (currentWebPage == null) {
return null;
}
return currentWebPage.Html;
}
}
Установка точки останова в моем вспомогательном методе показывает, что CurrentPage
на самом деле не является экземпляром WebPage
, поэтому значение null
.
Вот иерархия типов CurrentPage
(мои имена классов слегка подправлены):
ASP._Page_Views_mycontroller_View_cshtml
My.Site.MyWebViewPage`1
System.Web.Mvc.WebViewPage`1
System.Web.Mvc.WebViewPage
System.Web.WebPages.WebPageBase
System.Web.WebPages.WebPageRenderingBase
System.Web.WebPages.WebPageExecutingBase
System.Object
Обратите внимание, что базовый класс моего представления был указан в Web.config:
<system.web.webPages.razor>
<pages pageBaseType="My.Site.MyWebViewPage">
...
, который определяется как в общей, так и в не универсальной форме:
public abstract class MyWebViewPage : WebViewPage { ... }
public abstract class MyWebViewPage<TModel> : WebViewPage<TModel> { ... }
Итак,если эта проблема не возникает для других, возможно, они не используют пользовательский pageBaseType
.
Обратите внимание, что я поместил объявление @helper
в App_Code\Helpers.cshtml
в надежде сделать это глобальнодоступный.
Я что-то не так делаю, или это ошибка?
EDIT Спасибо, Дарин, за то, что указал на это как на известную проблему.Тем не менее, почему свойство Html
не переопределено как:
public static HtmlHelper Html {
get {
WebPage currentWebPage = CurrentPage as WebPage;
if (currentWebPage != null) {
return currentWebPage.Html;
}
WebViewPage currentWebViewPage = CurrentPage as WebViewPage;
if (currentWebViewPage != null) {
return currentWebViewPage.Html;
}
return null;
}
}