1

我制作了一个自定义助手,我试图将其包含在所有页面中。

帮手:

namespace project.CacheBreaker
{
 public static class CacheBreaker
 {
    public static void CacheBreak(
        this UrlHelper url, string contentPath)
    {
        url.Content(contentPath);
    }
 }
}

我试图从以下方面公开它web.config

<system.web>
 <pages>
  <namespaces>
    <add namespace="project.CacheBreaker"/>
  </namespaces>
 </pages>
</system.web>

尝试在视图中访问它时出现错误:

<script src="@Url.CacheBreak("~/Scripts/link.js")" type="text/javascript"></script>

其中指出:

"说明:编译所需资源时出错
来服务这个请求。请查看以下特定错误详细信息
并适当地修改您的源代码。”
“编译器错误消息:CS1061:‘System.Web.Mvc.UrlHelper’不包含
'CacheBreak' 的定义并且没有扩展方法 'CacheBreak' 接受
可以找到“System.Web.Mvc.UrlHelper”类型的第一个参数
(您是否缺少 using 指令或程序集引用?)”

我以为我已经采取了所有必要的步骤,为什么这个自定义方法不可用?

4

1 回答 1

1

但是您的 UrlHelper 不返回任何内容。它是无效的。你不可能用: 来调用它@Url.CacheBreak(...)。如果您希望以这种方式使用您的助手,它应该返回 anIHtmlString或 a string

public static string CacheBreak(this UrlHelper url, string contentPath)
{
    return url.Content(contentPath);
}

哦,顺便说一下,有一个只是环绕的助手Url.Content似乎有点没用,因为你可以直接写:

<script src="@Url.Content("~/Scripts/link.js")" type="text/javascript"></script>

此外,您在问题中谈论的 wbe.config 似乎是错误的 wbe.config。你知道,有一个~/web.config,还有一个~/Views/web.config是两个完全不同的文件。如果你使用的是 Razor 视图引擎,你应该在~/Views/web.config文件中定义你的命名空间:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />

        <add namespace="project.CacheBreaker"/>
      </namespaces>
    </pages>
</system.web.webPages.razor>
于 2013-02-17T23:29:57.397 回答