2017-12-12 27 views
0

フォームの送信時にAjaxOptionsを使用して2つの関数を実行しようとしています。ただし、呼び出される関数は1つだけです。私は、フォームが提出されたときに両方を実行したいと思います。Ajaxオプションを使用して2つの関数を呼び出す

@using (Ajax.BeginForm("AddDiagnosis", "Student", 

      new AjaxOptions(){ 
       OnSuccess = "HandleAddDiagnosisCode", 
       OnBegin = "return ValidateAddStudentDiagnosisCode(" + @studentId + ")" 

      }, new 
      { 
       id = "AddStudentDiagnosis-" + @studentId, 
       name = "AddStudentDiagnosis-" + @studentId 
      } 
      )) 
     { 

、これらが機能している:

は、ここに私のAjaxのオプションである

function ValidateAddStudentDiagnosisCode(id) { 
    var valid = true;  
    var msg = ""; 
    var errorPanel = $('#modal-AddStudentDiagnosis-ErrorPanel'); 
    PopulateErrorMessage(errorPanel, msg); 
    errorPanel.hide(); 
    var diagCode = $('#modal-AddStudentDiagnosis_DiagCode-' + id).val(); 

    if (diagCode === "") { 
     msg = "You must select a diagnosis code"; 
     valid = false; 
    } 
    var sequence = $('#modal-AddStudentDiagnosis_Sequence-' + id).val(); 
    if (sequence === "") { 
     msg = "You must select a sequence"; 
     valid = false;   
    } 
    if (valid == false) { 
     PopulateErrorMessage(errorPanel, msg);  
    }  
    return valid; 
} 

    function HandleAddDiagnosisCode(e) { 
     alert('test'); 
     var errorPanel = $('#modal-AddStudentDiagnosis-ErrorPanel'); 
     PopulateErrorMessage(errorPanel, ''); 
     var errorMessage = e.ErrorMessage; 
     if (errorMessage.length > 0) { 
      PopulateErrorPanel(errorPanel, errorMessage); 
     } 
     else { 
      ClearModal();   
      // Reload the document view 
      $('#detailPanel').fadeOut(500, function() { 
       $(this).empty(); 
      }).fadeIn(250, function() { 
       $(this).html(e.Html); 
       BindDocumentEdit(); 
       BindDataTable(); 
       BindDatePickers();    
      }); 
     } 

フォームが送信されたとき、私のテストアラートが呼び出されません。

+0

?アヤックスコールの前に?アヤックスコールの後に? – Shyju

+0

その後、検証フォームを実行し、有効であればハンドル関数を実行します。 – RancorTamer

+0

したがって、ajax呼び出しを行う前にvalidate関数を呼び出して、有効ではなく、ajax呼び出しが完了した後で(サーバーからの応答を受け取った後に)2番目の関数を呼び出したい場合は、Ajax呼び出しを停止しますか? – Shyju

答えて

0

あなたはあなたの関数は次のように無名関数を使って呼び出してラップすることができます:あなたが実行したいんとき

@using (@Ajax.BeginForm("AddDiagnosis", "Student", new AjaxOptions 
    { 
     OnSuccess = "new function(){func1(xhr); func2();}" 
    }) 
+0

私はこれを試して、コードを壊しました。私は両方の関数を入れようとしたときに、名前空間が定義されていないというエラーが出ました。 – RancorTamer

関連する問題