在我的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。
UpdatePanels出现问题:
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:Button Text="Update" runat="server" OnClick="btnOk_Click" ID="btnOk" />
</ContentTemplate>
</asp:UpdatePanel>
按“更新”按钮,css将不会更新。 这是正确的行为,但我需要找到解决方法。
我的建议是搬家
<link href="/Scripts/css.ashx" rel="stylesheet" type="text/css" />
在MasterPage中阻止另一个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。