gpt4 book ai didi

c# - 在 PreRender 中读取脚本标签

转载 作者:太空宇宙 更新时间:2023-11-03 15:53:55 26 4
gpt4 key购买 nike

我正在尝试确定是否可以在母版页 PreRender 事件中读取脚本标记。我有 CSS 链接,但到目前为止脚本标签还没有成功。

这会获取 CSS 链接:

foreach (var c in HeadElement.Controls)
{
var link = c as HtmlLink;
if (link != null)
{
var url = new Uri(link.Href, UriKind.RelativeOrAbsolute);
if (url.IsAbsoluteUri == false)
{
System.Diagnostics.Debug.WriteLine(url);
}
}
}

但是,脚本标签似乎不在控件集合中,它们也不在 ScriptManager.GetCurrent(Page) 脚本集合中(似乎获取了 AjaxControlToolkit ScriptManager)。

有人有什么建议吗?

仅供引用,它们只是母版页上的普通脚本标签,不是动态添加的,也不是使用脚本管理器添加的。

HTML 标记:

<head id="HeadElement" runat="server">
...
<link href="/css/normalize.css" rel="stylesheet" />
<link href="css/jquery.ui.timepicker.css" rel="stylesheet" />
...
<script src="/Scripts/bowser.js" type="text/javascript"></script>
...
</head>

最佳答案

问题的答案:

如果没有 runat="server",WebForms 不会将脚本标签解析为控制对象。

我试图解决的问题的答案:

我们在缓存方面遇到了问题,当我们发布网站的新版本时,客户端不会得到更新。

在我们的 MVC 端,我们使用的是 bundle ,它会自动使用版本 URL 参数来强制客户端获取最新版本。但是我们的遗留 WebForms 应用程序到处都是脚本和链接标记,所以我想我可以让母版页自动执行类似于捆绑所做的事情。

阅读更多有关该问题的信息,只需将此部分添加到 web.config 中即可解决:

<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:20:00" />
</staticContent>
</system.webServer>

我将其设置为 20 分钟,因为这是我们的默认 session 超时长度,因此应该为用户提供相对较好的 session 性能(因此他们的浏览器甚至不会请求新内容)。

在此之后,他们的浏览器将对 Web 服务器执行 ping 操作以获取刷新的内容 - IIS 会在必要时自动响应 304 未修改,因此带宽不会受到严重影响。

关于c# - 在 PreRender 中读取脚本标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24557050/

26 4 0