0

在我的 ASP.NET WebForms 项目中,我需要更新每个页面请求的样式表。

现在没问题 - 我添加了 css.ashx 处理程序

public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/css";
            Random r = new Random();
            int red = r.Next(0, 255);
            int green = r.Next(0, 255);
            int blue = r.Next(0, 255);

            string css = string.Format("body {{ background-color: rgba({0}, {1}, {2}, 1); }}", red, green, blue);
            context.Response.Write(css);
        }

并将其放入母版页:

<link href="/Scripts/css.ashx?tmp=<%=(new Random()).Next() %>" rel="stylesheet" type="text/css" />

仍然没有问题。每个请求都会加载 Css。

UpdatePanel 出现问题:

<asp:UpdatePanel runat="server">
    <ContentTemplate>
        <asp:Button Text="Update" runat="server" OnClick="btnOk_Click" ID="btnOk" />
    </ContentTemplate>
</asp:UpdatePanel>

按下“更新”按钮,css 将不会被更新。这是正确的行为,但我需要找到解决方法。

我的建议是在 MasterPage 中将块移动 到另一个<link href="/Scripts/css.ashx" rel="stylesheet" type="text/css" />UpdatePanelUpdateMode="Always"

<asp:UpdatePanel runat="server" UpdateMode="Always">
    <ContentTemplate>
       <link href="/Scripts/css.ashx?tmp=<%=(new Random()).Next() %>" rel="stylesheet" type="text/css" />
    </ContentTemplate>
</asp:UpdatePanel>

它工作得很好,但我只能在表单元素中添加这个块。结果我有无效的 HTML 文档(链接元素位于正文中,而不是头部)。

我该如何预防?有任何想法吗?我不想为每个更新链接href的请求注册javascript。

4

0 回答 0