我制作了一个自定义助手,我试图将其包含在所有页面中。
助手:
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>
其中说:
"Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately."
"Compiler Error Message: CS1061: 'System.Web.Mvc.UrlHelper' does not contain a definition for 'CacheBreak' and no extension method 'CacheBreak' accepting a first argument of type 'System.Web.Mvc.UrlHelper' could be found (are you missing a using directive or an assembly reference?)"
我以为我已经采取了所有必要的步骤,为什么这个自定义方法不可用?
答案 0 :(得分:1)
但你的UrlHelper不会返回任何内容。这是无效的。你不能用@Url.CacheBreak(...)
来称呼它。如果您希望以这种方式使用帮助器,则应返回IHtmlString
或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>