2008-11-19 8 views
1

Cette question est directement liée à ma précédente question ASP.NET AJAXcontrôle Refresh sans panneau de mise à jour en utilisant ASP.NET AJAX

Est-il possible d'effectuer le poste arrière de manière asynchrone? J'ai plusieurs contrôles CustomTextbox sur la page, lorsque je publie, je veux mettre à jour un autre contrôle sur le formulaire.

Si je place toutes les commandes d'un panneau de mise à jour après la première publication dans un processus qui prend quelques secondes, toutes les modifications que j'ai apportées aux autres contrôles sont restituées avec leurs valeurs d'origine.

Une idée pour résoudre ce problème?

Type.registerNamespace('Demo'); 

Demo.CustomTextBox = function(element) { 
    Demo.CustomTextBox.initializeBase(this, [element]); 
} 

Demo.CustomTextBox.prototype = { 

    initialize: function() { 
     Demo.CustomTextBox.callBaseMethod(this, 'initialize'); 

     this._onblurHandler = Function.createDelegate(this, this._onBlur); 

     $addHandlers(this.get_element(), 
        { 
         'blur': this._onBlur 
        }, 
        this); 
    }, 

    dispose: function() { 
     $clearHandlers(this.get_element()); 

     Demo.CustomTextBox.callBaseMethod(this, 'dispose'); 
    }, 

    _onBlur: function(e) { 
    if (this.get_element() && !this.get_element().disabled) { 
      /* Cridit to AdamB for this line of code */ 
      __doPostBack(this.get_element().id, 0); 
     } 
    } 
} 

Demo.CustomTextBox.registerClass('Demo.CustomTextBox', Sys.UI.Control); 

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded(); 

Répondre

2

mettre Seul le panneau de mise à jour autour du contrôle qui doit être mis à jour, et que les contrôles qui déclenchent les changements déclencheurs sur ce panneau de mise à jour:

<asp:TextBox runat="server" ID="Entry2" /> 
<asp:TextBox runat="server" ID="Entry1" /> 
<asp:UpdatePanel> 
    <ContentTemplate> 
     <asp:TextBox runat="server" ID="Result" ReadOnly="true" /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="Entry1" /> 
     <asp:AsyncPostBackTrigger ControlID="Entry2" /> 
    </Triggers> 
</asp:UpdatePanel> 

En conséquence, lorsque les finitions postback , seul le contenu du panneau de mise à jour change. AJAX affiche les valeurs de tous les contrôles sur la page, pas seulement ceux du modèle de contenu.

L'option 2 (et plus impliquée) serait d'écrire un service web qui fait le calcul et du javascript pour l'appeler.

+0

Acclamations Robert, je pensais que cela pourrait être le cas. –

Questions connexes