这是一个错误吗?或者它是ASP.NET 4(或MVC 2)中的设置?

时间:2010-12-21 16:30:30

标签: asp.net asp.net-mvc asp.net-mvc-2

我刚刚开始尝试使用T4MVC,我喜欢消除魔法字符串的想法。

但是,当我尝试在我的主页面上使用它来获取样式表时,我得到了这个:

<link href="<%: Links.Content.site_css %>" rel="stylesheet" type="text/css" />

这样的结果:

<link href="&lt;%: Links.Content.site_css %>" rel="stylesheet" type="text/css" />

这些正确呈现:

<link href="<%: Url.Content("~/Content/Site.css") %>" rel="stylesheet" type="text/css" />
<link href="<%: Links.Content.site_css + "" %>" rel="stylesheet" type="text/css" />

看来,只要我在代码段中有双引号,它就可以工作。但是当我把其他东西放在那里时,它逃脱了领先的“不到”。

这是我可以关闭的吗?这是一个错误吗?


编辑:

<script src="..." ... /> 不会发生,<a href="...">也不会发生


编辑2:

最小的案例:

<link href="<%: string.Empty %>" />

VS

<link href="<%: "" %>" />

<小时/>

编辑3:

我有一个解决方法,我已经实现了一个HtmlHelper扩展,以便我可以这样做:

<%: Html.StyleSheet(Links.Content.site_css) %>

我更喜欢对intellisens的支持,所以我实际上会坚持这一点。现在,我只是想解决这个问题。

4 个答案:

答案 0 :(得分:2)

对我来说这看起来像个错误,编译后的输出是:

private global::System.Web.UI.HtmlControls.HtmlLink @__BuildControl__control5() {
    global::System.Web.UI.HtmlControls.HtmlLink @__ctrl;            
    @__ctrl = new global::System.Web.UI.HtmlControls.HtmlLink();
    @__ctrl.Href = "<%: String.Empty %>";
    ((System.Web.UI.IAttributeAccessor)(@__ctrl)).SetAttribute("rel", "stylesheet");
    ((System.Web.UI.IAttributeAccessor)(@__ctrl)).SetAttribute("type", "text/css");
    return @__ctrl;
}

这似乎只有在控件位于head runat="server"

内时才会发生

答案 1 :(得分:0)

我认为问题是冒号。请尝试使用<link href="<%= string.Empty %>" />代替<link href="<%: string.Empty %>" />.

答案 2 :(得分:0)

根据Gu<%:是ASP.NET 4.0的一项功能。尝试定位4.0,看看它是否仍然失败。

答案 3 :(得分:0)

从头标记中删除runat =“server”属性。

服务器生成的头标记将为任何链接标记呈现HtmlLink标记。 href的内容取自源和urlencoded。这不适用于脚本包含。

修改
如果您无法从头标记中删除runat =“server”,请编写如下链接标记:

<link href="<%= ... %>" runat="" />

以下是错误“runat属性必须具有值服务器”

<link href="<%= ... %>myfile.css" runat="" />