2012-01-07 19 views
5

ページに送信ボタンがあります。ajaxコールでJavaScriptのサイドボタンクリックイベントをjavascriptから呼び出す

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

JavaScriptでは、すべてのフィールドを検証するValidateSaveTest関数が呼び出されます。

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

ajaxレスポンスを受信すると、JavaScriptのサーバーサイドボタンクリックイベントを発生させる必要があります。

答えて

12

によってクリックされた場合、これはポストバックをトリガーする最初

に二重のアンダースコアこの

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

注意してみてくださいClientScriptManagerのGetPostBackEventReferenceメソッドから:

クライアントイベントで使用して、サーバにポストバック を引き起こす文字列を返します。

これは、通常のonclickを書き込むために使用されているが<asp:linkButton>のようなコントロールの属性がありますが、同様にあなたのjQueryのコールバックでそれを使用することができます。

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

上記<%= %>ブロックは、次のJavaScriptを書き出します

これは、ASP.NETがボタンがクリックされたと思うようにフォームをサーバーにポストバックするので、サーバー-side btnSubmit_Clickがトリガーされます。

このメソッドを使用すると、実際のコントロールにC#参照を渡すことができます。クライアントID、または__doPostback() JavaScript関数の正しい名前と引数を心配する必要はありません。このメソッドを呼び出すと、ClientScriptManagerによってすべてが処理されます。

+0

ありがとうございました。あなたの最初の答えでは、私はmsdnに言及したとき、私はそれを理解していない。しかし、あなたの説明の後に。解決策だけでなく、何が起こっているのか理解して... –

+0

どのようにOnclickイベントが発生しましたか?このコードでOnclickイベントが発生したとおっしゃいましたか?私はそれを理解することができます。 –

+0

@AliForoughiサーバー側のイベントがどのようにトリガーされるのか説明するために私の答えを編集しましたが、それは役に立ちますか? –

3

ボタンはあなたが必要なJavaScriptコードを取得することができ、ユーザ

+2

これはポストバックを作成していますが、ボタンのサーバー側ボタンのクリックイベントは発生していません。 –

+0

ClientIDが私のためには機能しませんでしたが、UniqueIDはそれを行いました。私のコードはSharePoint 2010のマークアップの混乱に巻き込まれ、私はこのプロパティを使用して他の誰かが言及していることに気付きました。また、<%= Page.ClientScript.GetPostBackEventReference(this.SaveButton、string.Empty)%>;私のためにも働きます。 – Andez

関連する問題