0

masterpage とその継承ページがあります。マスターページにはリテラルがあり、条件別にメッセージを表示しています。継承ページでは、これらのメッセージを stringbuilder で作成しています。

literal.Text = "<div id=\"alertWarning\" style=\"display:none; color:#fff; text-align:center; padding: 8px 10px 9px; width:auto; position:relative; background:#C79810;\"><h3>" + title + "</h3><p>" + error + "</p></div>";

            StringBuilder sb = new StringBuilder();
            sb.Append("$(function() { ");
            sb.Append(" $('#alertWarning').toggle({");
            sb.Append("    width: 400");
            sb.Append(" });");
            sb.Append("});");
            sb.Append("$('html, body').animate({ scrollTop : 0 }, '500');");

            if (HttpContext.Current.CurrentHandler is Page)
            {
                Page pa = (Page)HttpContext.Current.CurrentHandler;

                if (ScriptManager.GetCurrent(pa) != null)
                {
                    ScriptManager.RegisterStartupScript(pa, typeof(Page), "alert", sb.ToString(), true);
                }
                else
                {
                    pa.ClientScript.RegisterClientScriptBlock(typeof(Page), "alert", sb.ToString(), true);
                }
            }


マスターページには、表示メッセージを自動非表示にするこのスクリプトがあります。

<script type="text/javascript">
        function pageLoad(sender, args) {
            setTimeout(function () { $("#alertError").toggle("close"); }, 5000);
            setTimeout(function () { $("#alertSuccess").toggle("close"); }, 2000);
            setTimeout(function () { $("#alertWarning").toggle("close"); }, 3000);
        };
    </script>


しかし、ページがポストバックすると、メッセージが再び表示されます。一度だけ表示することはできますか?

4

1 に答える 1

1

簡単な解決策は、PostBack でない場合にのみそのスクリプトを追加することです。

    if (HttpContext.Current.CurrentHandler is Page)
    {
        Page pa = (Page)HttpContext.Current.CurrentHandler;
        if(!pa.IsPostBack)
        {
            if (ScriptManager.GetCurrent(pa) != null)
            {
                ScriptManager.RegisterStartupScript(pa, typeof(Page), "alert", sb.ToString(), true);
            }
            else
            {
                pa.ClientScript.RegisterClientScriptBlock(typeof(Page), "alert", sb.ToString(), true);
            }
        }
    }
于 2012-09-21T07:39:12.687 に答える