在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>

在PreRender中读取脚本标签

问题的答案:

你不能,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没有修改,如果有必要,带宽不会受到严重影响。