gpt4 book ai didi

c# - ASP.NET Webform css 链接被破坏

转载 作者:行者123 更新时间:2023-11-30 15:50:06 24 4
gpt4 key购买 nike

由于某些原因,webforms 母版页中的 css 链接被 ASP.NET 破坏了。

使用masterpage的页面位于/subdir1/subdir2/page.aspx

不确定为什么会这样,但这里有一段代码:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<link href="<%= MyNamespace.Helpers.UrlHelper.CssRoot %>Site.css" rel="stylesheet" type="text/css" />
<script src="<%= MyNamespace.Helpers.UrlHelper.JavascriptRoot %>jquery-1.3.2.min.js" type="text/javascript"></script>
<asp:ContentPlaceHolder ID="cphHead" runat="server">
</asp:ContentPlaceHolder>
</head>

正在创建的 Html 输出是:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>
Untitled Page
</title><link href="../../%3C%25=%MyNamespace.Helpers.UrlHelper.CssRoot%20%25%3ESite.css" rel="stylesheet" type="text/css" />
<script src="/Javascript/jquery-1.3.2.min.js" type="text/javascript"></script>
</head>

为什么这对脚本标签有效但破坏了链接标签而不是实际执行包含的代码。如果我将“链接”标签更改为“脚本”标签(这是错误的,但出于测试目的),它会生成我期望的正确 html。为什么 ASP.NET 弄乱了我的 Css 链接标记而不是 javascript 的脚本标记?

链接标记有什么特别之处使 ASP.NET 认为它需要对其进行破坏吗?

最佳答案

这是一个基于方法的单独答案,可能更符合您的需求。我发现字符串重整的原因是 HtmlLink 对象在呈现期间对 href 值进行了内部处理。使用 .NET Reflector 我发现了一个 Overrides RenderAttributes 方法。这是它的代码:

Protected Overrides Sub RenderAttributes(ByVal writer as HtmlTextWriter)
If Not String.IsNullOrEmpty(Me.Href) Then
MyBase.Attributes.Item("href") = MyBase.ResolveClientUrl(Me.Href)
End If
MyBase.RenderAttributes(writer)
End Sub

我认为正在发生的事情是在解析您的帮助程序行之前调用 RenderAttributes 方法,并针对字符串“<%= MyNamespace.Helpers.UrlHelper.CssRoot %>Site.css”使用 ResolveClientUrl。使用“~/”URL 字符串的解决方案不受此影响,因为 ResolveClientUrl 能够理解该表示法。

目前我看到了两个适合您的解决方案。 1) 使用 Edit #2 方法在 Page_Load 或 Page_PreRender 期间将助手的 URL 字符串注入(inject)到元素中,或者 2) 创建您自己的 HtmlLink 元素的覆盖版本,该版本不尝试使用 ResolveClientUrl。 #1 肯定是更简单的解决方案。

希望这有助于阐明这个问题。

关于c# - ASP.NET Webform css 链接被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/987535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com