在PreRender中读取脚本标签
本文关键字:脚本 标签 读取 PreRender | 更新日期: 2023-09-27 18:11:14
我试图找出是否有可能在母版页preender事件中读取脚本标签。我有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>
问题的答案:
你不能,WebForms不解析脚本标签到控制对象没有runat="server"
。
我想解决的问题的答案:
我们在缓存方面遇到了问题,当我们发布新版本的网站时,客户端无法得到更新。
在我们的MVC端,我们使用bundle,它会自动使用版本URL参数来强制客户端获取最新版本。但是我们的传统WebForms应用程序到处都是脚本和链接标签,所以我想我可以让母版页自动做一些类似于捆绑所做的事情。
阅读更多关于这个问题,它可以简单地通过将这一节添加到web.config中来解决:
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:20:00" />
</staticContent>
</system.webServer>
我将其设置为20分钟,因为这是我们默认的会话超时长度,因此应该在会话中为用户提供相对较好的性能(因此他们的浏览器甚至不会请求新内容)。
在此之后,他们的浏览器将ping web服务器更新的内容- IIS自动响应304没有修改,如果有必要,带宽不会受到严重影响。