2

我为 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" />

但是,该方法没有被执行,并且呈现以下内容:

href="../Views/Shared/%3C%25=%20Url.SiteStylesheet()%20%25%3E"

正如你所看到的,扩展方法没有被执行,而整个事情只是被编码了。如果我更改方法签名以接受参数:

public static string SiteStylesheet(this UrlHelper urlHelper, string dummy)

然后执行扩展方法,输出如预期:

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

那么我的问题是这是设计使然,还是 ASP.NET MVC Web 窗体视图引擎中的错误?

4

3 回答 3

3

当我遇到这个问题时,是因为我的扩展方法位于 web.config 中未指定的命名空间中。

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

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

于 2009-04-20T17:16:06.343 回答
3

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

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

于 2009-07-22T18:11:02.173 回答
0

我想你发现了一个错误!

我试过了,发现这只发生在母版页的头部,并且只发生在<link>标签中(<script>标签渲染得很好)。

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

这超越了 ASP.NET MVC。我在一个经典的 Web 窗体 ASP.NET 站点的母版页中尝试了它,但问题仍然存在。这似乎是 Web 窗体渲染引擎中的错误或类似的东西。

于 2009-04-28T14:28:05.090 回答