2012-01-07 11 views
5

Ho un pulsante di invio su una pagina.Alza l'evento clic sul pulsante lato server da javascript in chiamata ajax

<asp:Button ID="btnSubmit" runat="server" Text="Save Test" OnClick="btnSubmit_Click" 
             OnClientClick="return ValidateSaveTest(this);" /> 

Su Javascript, viene chiamata la funzione ValidateSaveTest che convalida tutti i campi.

function ValidateSaveTest(Sender) { 

      //do some validation, if fails return false from here. else move forward 

     var parameters = {}; 
     parameters["parametersName"] = $("#" + hidTestId).val(); 

     var succeededAjaxFn = function(result) { 
      if (result== true) { 
       var isNewVersion = confirm("Confirmation message"); 
       if(isNewVersion) 
       { 
         //Raise server side button click event. Dont call click side event anymore. 
         $("#" + "<%=btnSubmit.ClientID %>").click(); 
       } 
       return false; 
      } 

     } 
     var failedAjaxFn = function(result) { return false; } 

      //jquery ajax call 
     CallWebMethod("../Service.asmx", "IsTestUsed", parameters, succeededAjaxFn, failedAjaxFn); 

     //async call, always return false hence no postback from here. 
     //Need waiting unless ajax response is obtained. 
     return false; 
    } 

Ho bisogno di aumentare l'evento di clic sul pulsante lato server da javascript una volta ricevuta la risposta ajax.

risposta

12

È possibile ottenere il codice JavaScript necessario dal metodo GetPostBackEventReference di ClientScriptManager:

Restituisce una stringa che può essere utilizzata in un evento client per causare il postback al server.

Questo è normalmente utilizzato per la scrittura del onclick attributi sui controlli come il <asp:linkButton>, ma è possibile utilizzare nel vostro callback jQuery così:

var succeededAjaxFn = function(result) { 
    //Raise server side button click event. Dont call click side event anymore. 
    <%= Page.ClientScript.GetPostBackEventReference(btnSubmit, String.Empty) %>; 
} 

Il blocco <%= %> sopra scriverà il seguente JavaScript per voi:

__doPostBack('btnSubmit','') 

che a sua volta inviare di nuovo il modulo per il server in modo che ASP.NET pensa che il pulsante è stato cliccato, e così il server -l'interruttore btnSubmit_Click viene attivato.

Si noti che utilizzando questo metodo, è possibile passare un riferimento C# al controllo effettivo. Non devi preoccuparti del suo ID cliente o del nome e degli argomenti corretti della funzione JavaScript __doPostback(). Tutto ciò che è curato dallo ClientScriptManager quando si chiama questo metodo.

+0

Grazie mille. Ha funzionato. Nella tua risposta iniziale quando mi sono riferito a msdn, non l'ho capito. Ma dopo la tua spiegazione. La soluzione non solo ha funzionato ma ha anche capito cosa sta succedendo ... –

+0

come è stato sollevato l'evento Onclick? hai detto che l'evento Onclick generato in questo codice? Posso capirlo. –

+0

@AliForoughi Ho modificato la mia risposta per spiegare come verrà attivato l'evento lato server, può essere d'aiuto? –

3

Prova questo

__doPostBack('<%=btDemo.ClientID%>','OnClick'); 

nota la doppia sottolineatura all'inizio

Questo dovrebbe far scattare un postback se il pulsante è stato cliccato dall'utente

+2

Questo sta facendo un postback, ma non sta sollevando l'evento di clic del pulsante sul lato server del pulsante. –

+0

ClientID non ha funzionato neanche per me, ma UniqueID lo ha fatto. Il mio codice è intrecciato in un pasticcio di markup di SharePoint 2010 e ho notato che qualcun altro menziona l'utilizzo di questa proprietà. Anche <% = Page.ClientScript.GetPostBackEventReference (this.SaveButton, string.Empty)%>; lavora anche per me. – Andez

Problemi correlati