我想我知道是什么导致了这个问题......
Html
属性 getter的定义是:
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
以期使其全球可访问。
我做错了什么,还是这是一个错误?
编辑感谢达林指出这是一个已知问题。不过,为什么不将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;
}
}