在PreRender中读取脚本标记

时间:2014-07-03 14:54:19

标签: c# javascript asp.net .net webforms

如果可以在主页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>

1 个答案:

答案 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而不进行修改,因此带宽不会受到严重影响。