диалоговое окно jQuery появляется на каждой странице обратной передачи

У меня есть веб-страница с главным файлом. В главном файле есть панель обновления, содержащая таймер, используемый для отображения добавлений / изображений каждые несколько секунд. Однако заполнитель содержимого страницы не содержится в панели обновления. Это базовая разметка главной страницы:

<head id="hdMain" runat="server">
    <title>Main Master Page</title>
    <link href="~/Style/custom-theme/jquery-ui-1.10.1.custom.min.css" rel="stylesheet" />
    <asp:ContentPlaceHolder
        ID="cpHead"
        runat="server">
    </asp:ContentPlaceHolder>
</head>
<body style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px" scroll="no">
    <form id="frmMain" runat="server">
        <asp:ScriptManager
            ID="smMain"
            runat="server">
        </asp:ScriptManager>
        <div style="height: 671px; width: 1024px; z-index: 0;">
            <asp:ContentPlaceHolder
                ID="cpMain"
                runat="server">
            </asp:ContentPlaceHolder>
        </div>
        <div style="background-color: #192646; height: 97px; width: 1024px">
            <asp:UpdatePanel
                ID="upMain"
                runat="server"
                UpdateMode="Conditional">
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="tmrMain" />
                </Triggers>
                <ContentTemplate>
                    <asp:Timer
                        ID="tmrMain"
                        runat="server"
                        Interval="10000"
                        OnTick="RotateImage">
                    </asp:Timer>
                    <img
                        id="imgMain"
                        runat="server"
                        height="97"
                        width="1024"
                        alt=""
                        src="" />
                </ContentTemplate>
            </asp:UpdatePanel>
        </div>
    </form>
</body>
</html>

Теперь, когда моя страница загружается, мне нужно выполнить некоторую обработку на стороне сервера, прежде чем решить, хочу ли я запустить диалоговое окно jQuery. Для этого я использую приведенный ниже код в моем коде позади:

if (NeedToRunStartupScript())
{
    ClientScript.RegisterStartupScript(this.GetType(), "RedirectScript", "Sys.Application.add_load(function() { OpenDialog(); });", true);
}

OpenDialog () определяется в разметке следующим образом с заполнителем содержимого заголовка:

<script type="text/javascript" src="../Scripts/JQuery/jquery-1.9.1.js"></script>
<script type="text/javascript" src="../Scripts/JQuery/jquery-ui-1.10.1.custom.min.js"></script>
<script type="text/javascript">
     function OpenDialog() {
         $(function () {
             var redirectSomewhere = false;
             var newDialog = $('<div title="Dialog">\
                                <p>Do you wish to redirect?</p>\
                               </div>');

             newDialog.dialog({
                 height: 250,
                 width: 300,
                 modal: true,
                 buttons: {
                     Yes: function () {
                         redirectSomewhere = true;
                         $(this).dialog("close");
                     },
                     No: function () {
                         $(this).dialog("close");
                     }
                 },
                 close: function () {
                     if (redirectSomewhere) {
                         window.location.href = "SomePage.aspx";
                     }
                 }
             });
         });
     };

На самом деле довольно стандартные вещи. И этот код работает. Однако каждый раз, когда таймер щелкает и обновляет изображение, диалоговое окно появляется снова, поэтому, если я оставлю его там на несколько минут, у меня будут десятки диалоговых окон друг над другом. Мне в основном нужно, чтобы мой диалог регистрировался только один раз, а не повторно инициализировался при каждой частичной обратной передаче. Любая помощь будет оценена по достоинству.


person Avolare    schedule 09.12.2013    source источник


Ответы (1)


Вы пробовали проверить асинхронную обратную передачу, как это

bool isAsyncPostback = ScriptManager.GetCurrent(this).IsInAsyncPostBack;
if (NeedToRunStartupScript() && !isAsyncPostback)
{
    ClientScript.RegisterStartupScript(this.GetType(), "RedirectScript", "Sys.Application.add_load(function() { OpenDialog(); });", true);
}
person Svetlin Panayotov    schedule 09.12.2013
comment
да, я пробовал это, но это все еще не работает. В основном, когда я смотрю на источник, я вижу следующее: ‹script type = text / javascript› // ‹! [CDATA [Sys.Application.add_load (function () {OpenDialog ();}); Sys.Application.add_init (function () {$ create (Sys.UI._Timer, {enabled: true, interval: 10000, uniqueID: ctl00 $ tmrMain}, null, null, $ get (ctl00_tmrMain));}); Я думаю, мне нужно вывести его из нагрузки и в функцию инициализации. - person Avolare; 09.12.2013