Asp.net mvc UrlHelper扩展方法调用编码未执行

Asp.net mvc UrlHelper扩展方法调用编码未执行,asp.net-mvc,extension-methods,urlhelper,Asp.net Mvc,Extension Methods,Urlhelper,我为ASP.NET MVC UrlHelper创建了一个简单的扩展方法。它不接受任何参数,因为它的工作是从配置中查找样式表文件的名称,并返回样式表的url。扩展方法大致如下所示: public static string SiteStylesheet(this UrlHelper urlHelper) { var scriptFilename = UserInterfaceConfiguration.GetSection() .M

我为ASP.NET MVC UrlHelper创建了一个简单的扩展方法。它不接受任何参数,因为它的工作是从配置中查找样式表文件的名称,并返回样式表的url。扩展方法大致如下所示:

public static string SiteStylesheet(this UrlHelper urlHelper)
{
    var scriptFilename = UserInterfaceConfiguration.GetSection()
                             .Mvc.SiteStylesheet;
    return urlHelper.Content(string.Format("~/Assets/Scripts/{0}",
                                           scriptFilename));
}
<link href="<%= Url.SiteStylesheet() %>" rel="Stylesheet" type="text/css" />
我是这样用的:

public static string SiteStylesheet(this UrlHelper urlHelper)
{
    var scriptFilename = UserInterfaceConfiguration.GetSection()
                             .Mvc.SiteStylesheet;
    return urlHelper.Content(string.Format("~/Assets/Scripts/{0}",
                                           scriptFilename));
}
<link href="<%= Url.SiteStylesheet() %>" rel="Stylesheet" type="text/css" />
正如您所看到的,扩展方法并没有被执行,而是整个过程都被编码了。如果我更改方法签名以接受参数:

public static string SiteStylesheet(this UrlHelper urlHelper, string dummy)
然后执行扩展方法,输出如预期:

href="/Assets/Stylesheets/FluidCMS.css"

因此,我的问题是这是设计的还是ASP.NET MVC Web表单视图引擎中的一个错误?

当我遇到这个问题时,是因为我的扩展方法位于一个名称空间中,而该名称空间在Web.config中没有指定

<add namespace="Your.Extension.Method.Namespace"/>


它在configuration\system.web\pages\namespaces下运行

我想你发现了一个bug

我试过了,发现这只发生在母版页的标题部分,并且只发生在
标记(
标记呈现良好)中

问题显然是de href属性中的文本没有正确地解释为代码块


这超越了ASP.NET MVC。我在一个典型的Web表单ASP.NET站点的母版页中尝试了它,但问题仍然存在。这似乎是Web表单呈现引擎中的一个bug或类似的问题。

这个问题已经出现过多次。问题的根源在于标记具有runat=“server”,这导致解析器将标记视为服务器标记


最简单的解决方法是从head标记中删除runat=“server”。您失去的是使链接URL相对于当前页面的逻辑,但由于您使用的是帮助程序,因此不需要这样做。

谢谢,但包含我的扩展方法的命名空间位于web.config中,我仍然看到相同的行为。谢谢,我自己也参与了这一行为。也没有注意到有2个web.configsthank用于确认和进一步的详细信息。在这一点上,解决方法虽然很粗糙,但足够简单,不具有侵入性。再次感谢。