Почему триггер UpdatePanel вызывает исчезновение всего остального контента? - PullRequest
0 голосов
/ 14 февраля 2012

Я пишу приложение ASP.Net Web Forms, в котором есть несколько медленных внутренних операций, поэтому я пытаюсь использовать UpdatePanels для асинхронного выполнения операций.

Я хочу, чтобы эти операции выполнялисьбыть исполняемым только по одному и сообщать другим пользователям, когда кто-то выполняет одну из этих операций.В качестве быстрого и грязного способа сделать это, я хочу открыть простой модальный диалог с маской за ним, блокирующий доступ к сайту во время выполнения операции.Я делаю это в MasterPage, который используется на всех страницах сайта.

Я вставил модал в UpdatePanel и установил таймер, чтобы проверить глобальную переменную (из ApplicationState) на текущий статус.Если он выполняет задачу, отобразите модальный режим, иначе отключите его, установив Visibility = FalseЯ только хочу, чтобы это содержимое обновлялось, поэтому я обеспечиваю EnablePartialRendering = "true" в моем ScriptManager и устанавливаю UpdateModel = "Contitional" на UpdatePanel.Я даже вызываю .Update () в событии Timer Tick.

Звучит довольно хорошо для меня.Чтобы проверить, я получаю модал для случайного включения и выключения.До сих пор таймер работает, а модал отображает и прячет как чемпион.Единственная проблема в том, что после второго раза, когда модал скрыт, ВСЕ исчезает.

Так ... чтобы быть, модал скрыт, главная страница отображается нормально.Затем срабатывает таймер, отображается модал, красиво накладывающийся на главную страницу.Таймер снова срабатывает, и модальный режим исчезает, но так же и все остальное!

Я проверяю активный источник html позади 'inspect element' в Chrome, и содержимое исчезает!

I 'Здесь я упускаю что-то очень очевидное ...

Это мой код:

    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="OPTH.DesktopRollout.Website.SiteMaster" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head runat="server">
        <title></title>
        <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
        <asp:ContentPlaceHolder ID="HeadContent" runat="server">
        </asp:ContentPlaceHolder>    
    </head>
    <body>
        <form runat="server">
            <asp:ScriptManager ID="MainSM" runat='server' EnablePartialRendering="True" />        

            <asp:Timer runat="server" ID="CheckTimer" Interval="500" OnTick="CheckTimer_Tick"></asp:Timer>

            <asp:UpdatePanel runat="server" ID="ModalUp" UpdateMode="Conditional" RenderMode="Block" >
                <Triggers>
                    <asp:AsyncPostBackTrigger controlid="CheckTimer" eventname="Tick" />
                </Triggers>
            <ContentTemplate>            
                <asp:Panel id="modalPnl" runat="server">
                    <div class="modalPopup">
                        <div id="modalContent">Currently performing task: '<asp:Literal runat="server" ID="TaskNameLtr" />'. Please wait till it has completed before continuing.</div>                
                    </div>
                    <div class="modalOverlay" />    
                </asp:Panel>                        
            </ContentTemplate>
            </asp:UpdatePanel>

    //... other content is here... just static html and a ContentPlaceHolder for basepage.

Код бэкенда:

    protected void CheckTimer_Tick(object sender, EventArgs e)
    {

        modalPnl.Visible = IsExecutingTask; //Returns a random true or false based on time.
        TaskNameLtr.Text = DateTime.Now.ToShortDateTimeString();
        ModalUp.Update();
    }

Сенсей!Что этот молодой кузнечик делает неправильно?

Не думаю, что это как-то связано с этим, но мой CSS:

    .modalOverlay
    {
        position: fixed;
        width: 100%;
        height: 100%;    
        background-color: black;
        z-index: 1;

        filter: alpha(opacity=50); /* internet explorer */
        -khtml-opacity: 0.5;      /* khtml, old safari */
        -moz-opacity: 0.5;       /* mozilla, netscape */
        opacity: 0.5;           /* fx, safari, opera */     
    }

    .modalPopup 
    {
        position: fixed;
        margin-left: -225px;    
        top: 40%;
        left: 50%;
        width: 450px;
        height:100px;
        background-color: white;
        border: black solid 3px;
        z-index: 2;

        filter: alpha(opacity=100); /* internet explorer */
        -khtml-opacity: 1;      /* khtml, old safari */
        -moz-opacity: 1;       /* mozilla, netscape */
        opacity: 1;           /* fx, safari, opera */
    }

    .modalPopup #modalContent 
    {
        margin: 15px 30px;    
    }

Есть идеи?

ОБНОВЛЕНИЕЯ только что переместил весь код AJAX из MasterPage в Default.aspx.Теперь при асинхронной обратной передаче содержимое из Masterpage остается, но содержимое из Default.aspx исчезает.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Из всех поисков по этой проблеме я обнаруживал каждый раз, когда она решалась при обработке некорректного форматирования тегов DIV.

См. этот пост.

0 голосов
/ 31 октября 2012

Вы должны снова добавить элементы управления на страницу внутри панели обновления, в противном случае функция загрузки главной страницы очищает элементы управления, и, таким образом, действия этих элементов управления больше не работают

...