私は問題の原因を知っていると思います...
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これを既知の問題として指摘してくれたDarinに感謝します。それでも、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;
}
}