如果可以在主页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>
答案 0 :(得分:0)
回答问题:
您不能在没有runat="server"
的情况下将Web脚本解析为控件对象。
回答我试图解决的问题:
我们遇到了缓存问题,当我们发布新版本的网站时,客户端无法获得更新。
在我们的MVC端,我们使用bundle,它自动使用版本URL参数来强制客户端获取最新版本。但是我们遗留的WebForms应用程序遍布各处的脚本和链接标签,所以我认为我可以让母版页自动执行与捆绑操作类似的操作。
进一步了解该问题,只需将此部分添加到web.config中即可解决:
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:20:00" />
</staticContent>
</system.webServer>
我将其设置为20分钟,因为这是我们的默认会话超时长度,因此应该通过他们的会话为用户提供相对良好的性能(因此他们的浏览器甚至不会请求新内容)。
在此之后,他们的浏览器将ping网络服务器以获得更新的内容 - 如果需要,IIS会自动响应304而不进行修改,因此带宽不会受到严重影响。