从内联助手调用扩展助手 - 如何?

时间:2011-06-08 08:27:34

标签: asp.net-mvc-3 razor html-helper

我读了这篇[useful article],说我可以通过将它们放在特殊文件夹App_Code中的视图中来创建内联助手库。当我在那里移动@helper函数时,调用扩展助手我已经停止工作了。我看到[in this SO article]有一个问题,因为@helper是静态的,但我的扩展不是......我尝试了两种不同的方式,但无法使其正常工作。它无法识别我的扩展助手的存在。

'System.Web.WebPages.Html.HtmlHelper' does not contain a definition for 'Image'

我的扩展助手称为“图像”。我应该寻找什么?

3 个答案:

答案 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)

好吧,我的问题与命名空间有关...所以我在\ Views \ Shared \ HtmlHelpers.cs:

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中,但此页面似乎不受该机制的影响