我读了这篇[useful article],说我可以通过将它们放在特殊文件夹App_Code中的视图中来创建内联助手库。当我在那里移动@helper
函数时,调用扩展助手我已经停止工作了。我看到[in this SO article]有一个问题,因为@helper
是静态的,但我的扩展不是......我尝试了两种不同的方式,但无法使其正常工作。它无法识别我的扩展助手的存在。
'System.Web.WebPages.Html.HtmlHelper' does not contain a definition for 'Image'
我的扩展助手称为“图像”。我应该寻找什么?
答案 0 :(得分:1)
当您在剃刀视图中编写Helperextension时。 你需要像FileName.Method一样调用它。
例如,你在app_code中有CustomHelpers.cshtml文件,并且你有一个方法
@helper TruncateString(string input, int length)
{
if (input.Length <= length)
{
@input
}
else
{
@input.Substring(0, length)<text>...</text>
}
}
你可以从index.cshtml中调用它
@CustomHelpers.TruncateString("Example", 8);
答案 1 :(得分:1)
作为示例,以下代码在帮助程序库中使用“RenderPage”函数:
@helper GetSection(string sectionName, string sectionTitle, string sectionFileName){
<div id="@sectionName">
<h1>@sectionTitle</h1>
@System.Web.WebPages.WebPageContext.Current.Page.RenderPage("~/Views/Shared/MySections/" + @sectionFileName)
</div>
}
它演示了如何检索“当前页面”(上下文相关)实例。
此代码可以在您自己的“公共库”Razor帮助文件(“.cshtml”)中工作,该文件位于项目的“* app_code *”子文件夹中。
答案 2 :(得分:0)
public static class Html
{
public static MvcHtmlString Image(this HtmlHelper helper, string src, object htmlAttrs = null)
{
我通常从我的网页访问,如下所示:
@Html.Image("/path/to/image")
在App_Code \ Helpers.cshtml中:
@helper AddButton(string path)
{
var Html = ((System.Web.Mvc.WebViewPage) WebPageContext.Current.Page).Html;
@Html.Image(path);
}
但Intellisense会强调“形象”并抱怨:
'System.Web.Mvc.HtmlHelper<object>' does not contain a definition for 'Image'
and no extension method 'Image' accepting a first argument of type
'System.Web.Mvc.HtmlHelper<object>' could be found (are
you missing a directive or an assembly reference?)
原因似乎是Helpers.cshtml需要@using
用于命名空间...在我的常规页面上,命名空间包含在我的web.config中,但此页面似乎不受该机制的影响