私の 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は更新されません。これは正しい動作ですが、回避策を見つける必要があります。
私の提案は
、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 ドキュメントがあります (link 要素が head ではなく body にあります)。
どうすれば防ぐことができますか?何か案は?リンクhrefを更新するリクエストごとにjavascriptを登録したくありません。