очередь asp.net UpdatePanel постбэков - PullRequest
2 голосов
/ 11 июля 2009

Есть ли способ поставить в очередь постбэки с UpdatePanel?

У меня есть форма со многими текстовыми полями. каждое текстовое поле обернуто в его собственную UpdatePanel с AutoPostBack, установленным в true. поэтому при изменении текстового поля происходит обратная передача.

viewstate отключено (поэтому не нужно об этом беспокоиться).

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

Ответы [ 3 ]

4 голосов
/ 11 июля 2009

Вы можете получить "хук" на стороне клиента, когда панель обновлений собирается сработать. Это означает, что вы можете, по крайней мере, временно отключить текстовые поля (или получить какое-то уведомление «пожалуйста, подождите»), пока обновляется панель обновления.

В следующем фрагменте ASP.NET/Javascript показано, как перехватить срабатывание панелей обновления и отключить текстовые поля.

<form id="form1" runat="server">
    <asp:ScriptManager runat="server"></asp:ScriptManager>
    <div>
        <asp:UpdatePanel runat="server" ID="updatePane1">
            <ContentTemplate>
                <asp:TextBox runat="server" ID="textBox1" AutoPostBack="true" OnTextChanged="textBox_TextChanged" />
            </ContentTemplate>
        </asp:UpdatePanel>
        <br />
        <asp:UpdatePanel runat="server" ID="updatePane2">
            <ContentTemplate>
                <asp:TextBox runat="server" ID="textBox2" AutoPostBack="true" OnTextChanged="textBox_TextChanged" />
            </ContentTemplate>
        </asp:UpdatePanel>
        <br />
    </div>
    </form>
    <script type="text/javascript">
        Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequest);
        function InitializeRequest(sender, args) {
            if (args._postBackElement.id == 'textBox1' || args._postBackElement.id == 'textBox2') {
                document.getElementById('textBox1').disabled = true;
                document.getElementById('textBox2').disabled = true; 
            }
        }
    </script>

Я знаю, что это не совсем то, о чем вы изначально просили («есть ли способ ставить постбэки в очередь с помощью UpdatePanel»), но чистый эффект заключается в том, что он заставляет пользователя ставить в очередь свои запросы, поэтому не более обрабатывается за один раз. Вы, вероятно, можете изменить это к чему-то более элегантному.

1 голос
/ 17 июля 2009

Я знаю, это не ответ на ваш вопрос. Но я бы рекомендовал переосмыслить, если вам действительно нужно обернуть каждое текстовое поле панелью обновления. Панели обновления полезны, но вы должны быть осторожны при их использовании. Простое решение JQuery Ajax может быть лучше в вашем сценарии.

1 голос
/ 11 июля 2009

Нет встроенного способа контролировать это. В jQuery есть несколько изящных вещей, которые делают вызовы AJAX довольно простыми. Вы могли бы попытаться разобраться с обработкой своих собственных постбэков таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...