在我的 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" />
:UpdatePanel
UpdateMode="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。