我正在尝试在Asp.net MVC 5:中做一个非常简单的Html助手
@helper GetMyTextArea()
{
@Html.TextArea("myText")
}
然后,我尝试将其包含在我的视图中:(助手在一个名为MyHelp.cshtml
的文件中,位于App_Code
文件夹中)
@MyHelp.GetMyTextArea()
如果我现在呈现我的视图,我会得到以下异常:
System.NullReferenceException:System.Web.WebPages.HelperPage.Html.get返回null。
有人知道这个问题吗?我想我可以用partial view
来解决它,但这对html助手来说应该不是问题。
在App_Code
文件夹中使用@helper
时会有某些限制,例如无法直接访问标准HtmlHelper
方法(您需要通过将其包含在方法中手动传递,例如@helper GetMyTextArea(HtmlHelper Html)
)。您可以添加@functions
,它可以直接访问HtmlHelper
方法:
@functions {
public static WebViewPage page = (PageContext.Page as WebViewPage);
public static HtmlHelper<object> html = page.Html;
}
因此,MyHelp.cshtml
的内容应该是这样的:
// adapted from /a/35269446/
@functions {
public static WebViewPage page = (PageContext.Page as WebViewPage);
public static HtmlHelper<object> html = page.Html;
}
@helper GetMyTextArea()
{
@Html.TextArea("myText")
}
之后,您可以将视图页面中的helper方法调用为@MyHelp.GetMyTextArea()
,而无需手动传递HtmlHelper
。
类似问题:
Razor:声明HTML助手
在App_Code 中的共享@helper中使用@Html