2009-07-10 18 views
2

gibt es eine Möglichkeit, Postbacks mit UpdatePanel Warteschlange?Warteschlange asp.net UpdatePanel Postbacks

Ich habe ein Formular mit vielen Textfeldern. Jede Textbox ist in ihr eigenes UpdatePanel eingebunden, wobei AutoPostBack auf true gesetzt ist. Wenn sich das Textfeld ändert, tritt ein Postback auf.

viewstate ist deaktiviert (Sie müssen sich also keine Gedanken darüber machen).

Das Problem tritt auf, wenn Benutzer ein Textfeld ändert und dann schnell Tabs zum nächsten Textfeld ändert und Tabs erneut. Einige der Postbacks gehen verloren und ich möchte das vermeiden.

Antwort

1

Es gibt keine eingebaute Möglichkeit, dies zu kontrollieren. jQuery hat einige ziemlich nette Sachen, die AJAX Anrufe ziemlich einfach machen. Sie könnten versuchen, Ihre eigenen Postbacks so zu behandeln.

4

Sie können einen clientseitigen "Hook" erhalten, wenn das Update-Fenster kurzzeitig ausgelöst wird. Das bedeutet, dass Sie die Textfelder zumindest vorübergehend deaktivieren können (oder eine Art "Bitte warten" -Benachrichtigung erhalten), während das Update-Fenster aktualisiert wird.

Das folgende Code-Schnipsel von ASP.NET/Javascript zeigt, wie die Aktualisierungspanel abzufangen und die Textfelder zu deaktivieren.

<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> 

Ich weiß, das ist nicht genau das, was Sie ursprünglich für Fragen („ist es eine Möglichkeit, Postbacks mit Update Schlange“), aber der Nettoeffekt ist, dass es den Benutzer zwingt, ihre Anfragen in die Warteschlange einzureihen, so dass keine mehrere werden gleichzeitig bearbeitet. Sie können dies wahrscheinlich auch etwas eleganter ändern.

1

Ich weiß, das ist keine Antwort auf Ihre Frage. Aber ich würde eine Neuüberlegung empfehlen, wenn Sie wirklich jedes Textfeld mit einem Update-Panel umhüllen müssen. Update-Panels sind nützlich, aber Sie müssen in ihrer Verwendung vorsichtig sein. Eine einfache jQuery Ajax-Lösung kann in Ihrem Szenario besser sein.

+0

das ist, was ich getan habe. update panel ist ok für Massenoperationen (wie große Teile von HTML anzeigen oder große Form gleichzeitig absetzen). Es nervt für kleine, schnelle Postbacks zum Server. – Sumrak

Verwandte Themen