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 はリクエストごとに読み込まれます。

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" />ブロックを別のブロックに移動することです。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 ドキュメントがあります (link 要素が head ではなく body にあります)。

どうすれば防ぐことができますか?何か案は?リンクhrefを更新するリクエストごとにjavascriptを登録したくありません。

4

0 に答える 0