2008-12-05 10 views
2

Je fais des appels asynchrones à partir de javascript en utilisant l'objet XMLHTTPRequest. En cas de succès, avec certaines valeurs de retour, je voudrais faire un post asynchrone sur un panneau de mise à jour et exécuter des méthodes côté serveur. Voici comment je l'implémente maintenant:Exécution d'événements ASP.NET à partir de javascript

<script language="javascript"> 
     function AjaxCallback_Success(objAjax) { 
     if (objAjax.responseText == "refresh") { 
       document.getElementById('<%= btnHidden.ClientID %>').click(); 
     } 
     } 
    </script> 
    <asp:UpdatePanel ID="upStatus" runat="server"> 
    <ContentTemplate> 
<asp:Button ID="btnHidden" runat="server" style="display: none;" OnClick="SomeMethod" /> 
    <asp:DropDownList ID="ddlStatus" field="Orders_Status" parent="Orders" runat="server"> 
    </asp:DropDownList> 
    </ContentTemplate> 
    </asp:UpdatePanel> 

Cela a à voir avec le flux de travail. Si, pendant que vous travaillez sur une commande, quelqu'un la facture, les options disponibles dans la liste déroulante des statuts changent. Donc, même un minuté vérifie les changements et s'il y a un changement, ce qui n'arriverait pas normalement, le panneau de mise à jour revient et la liste déroulante est reliée à une nouvelle table de données basée sur diverses valeurs de retour du texte de réponse ajax .

Mon code original est en réalité beaucoup plus compliqué que cela, mais j'ai juste fait abstraction juste assez pour rendre mon concept plus clair. Existe-t-il une meilleure façon de faire cela en supprimant le bouton caché et en effectuant un appel javascript direct qui provoquera une publication asynchrone du panneau de mise à jour et une méthode côté serveur?

Répondre

3

Soyez très prudent avec UpdatePanels, ils peuvent être très lourds s'ils ne sont pas utilisés correctement comme je l'explique here.

Mais le JavaScript pour soumettre un formulaire est:

__doPostBack('eventTarget','eventArguments'); 

Donc, dans votre exemple, vous auriez quelque chose comme:

__doPostBack('<%= btnHidden.ClientID %>',''); 
+0

Ce que je travaille en fait, mais je voulais contourner le bouton caché. Ce qui se passe, c'est que la liste déroulante est en train de rebondir sur les nouvelles données de la liste, si par hasard les données ont changé, ce que révèle la réponse XMLHTTPRequest. Je ne sais pas si c'est plus clair. J'ai tendance à être trop verbeux. – stephenbayer

+0

Vous pouvez appeler __doPostBack sans arguments, mais le gestionnaire d'événements ne se déclenche pas car le modèle d'objet ne connaît pas la source de l'événement. Vous obtenez Page_Load, etc, mais aucun autre gestionnaire d'événement. –

1

Vous pouvez supprimer le bouton caché et appelez

__doPostBack ('upStatus', '');

Cela entraînera une mise à jour asynchrone pour ce panneau de mise à jour

+0

Je comprends cela, mais comment l'obtenir pour appeler une méthode de gestionnaire d'événements? – stephenbayer

+0

Je suppose que je n'ai pas besoin, je pense que je suis compliquer les choses, si je mets une certaine logique dans l'événement de chargement de la page, il devrait être exécuté lorsque le panneau de mise à jour affiche ... par la fonction de retour ajax, pour transmettre les informations requises. – stephenbayer

+0

Je suis sûr à 100% de ce que vous essayez de faire, mais vous pouvez vérifier la propriété IsAsyncPostback des gestionnaires de scripts, côté client et serveur, et faire ce que vous devez faire dans cette instance –

Questions connexes