【问题标题】:Is this a bug? Or is it a setting in ASP.NET 4 (or MVC 2)?这是一个错误吗?还是它是 ASP.NET 4(或 MVC 2)中的设置?
【发布时间】:2011-08-24 19:56:36
【问题描述】:

我最近才开始尝试 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" />

看来,只要我在代码段内有双引号,它就可以工作。但是当我把其他东西放在那里时,它会避开领先的“小于”。

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


编辑:

这不会发生在&lt;script src="..." ... /&gt; 上,也不会发生在&lt;a href="..."&gt; 上。


编辑 2:

最小的情况:

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

对

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


编辑 3:

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

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

我更喜欢对智能感知的支持,所以我实际上会坚持下去。现在,我只是在尝试解决这个错误。

【问题讨论】:

  • 您是否尝试在属性周围使用单引号 (')?
  • 我直到现在才知道,但它确实表现出完全相同的症状。
  • 我认为冒号操作是 .NET 4.0 附带的,所以如果您的目标是 3.5 或更早版本,这可能是原因。
  • 它复制了同样的东西 - 目标 .net 4.0。我想你可能正在做某事
  • 好吧,我很确定这是一个错误。我应该向谁报告?

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


【解决方案1】:

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

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" 内时

【讨论】:

  • 感谢您的努力。我接受了这一点,并将其报告给 MS。
  • 不要认为这是一个错误,我相信从 1.1 开始就在 asp.net 中,该设计已被转移到 asp.net 视图引擎中。
  • @mxmissile:你如何解释最小复制案例(编辑#2)?
  • @mxmissile:就你的观点而言,我现在正在寻找其他似乎相关的问题(例如stackoverflow.com/questions/987535/…)
  • @John 当您将 runat="server" 添加到 head 标签时,它会将链接和脚本标签视为子控件。尝试将代码块添加到 asp.net 控件。
【解决方案2】:

我认为问题在于冒号。试试&lt;link href="&lt;%= string.Empty %&gt;" /&gt; 而不是&lt;link href="&lt;%: string.Empty %&gt;" /&gt;.

【讨论】:

  • 我刚刚针对 4 测试了冒号,但仍然失败。
  • 既然你让它工作了,我就不会为此失眠了。 Razor 视图引擎要好得多。
【解决方案3】:

根据Gu,&lt;%: 是 ASP.NET 4.0 的一个特性。尝试以 4.0 为目标,看看它是否仍然失败。

【讨论】:

  • 我的目标是 4.0。冒号语法只在某些时候有效。
【解决方案4】:

从 head 标签中移除 runat="server" 属性。

服务器生成的 head 标签将为任何链接标签呈现 HtmlLink 标签。 href 的内容取自源代码并进行了 urlencoded。这不适用于脚本包含。

编辑:
如果您无法从 head 标签中删除 runat="server",请编写如下链接标签:

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

下面给出错误“runat 属性必须有值服务器”

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

【讨论】:

    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2012-09-08
    相关资源
    最近更新 更多