2013-03-02 94 views
1

我不知道爲什麼我在使用AJAX.submit執行Html.BeginForm時不工作ValidationSummary如何在ajax提交中執行Html.ValidationSummary?

@model Contoso.MvcApplication.Models.Questions.MultipleChoiceQuestionTemplate 

@using (Html.BeginForm("EditQuestion", "Question", FormMethod.Post, new { id = "editQuestionForm" })) 
{ 
    @Html.ValidationSummary(true) 
    @Html.EditorForModel("Questions/_MultipleChoiceQuestion") 

    <p> 
     <input type="submit" value="Save" /> 
    </p> 
} 

    public class MultipleChoiceQuestionTemplate : QuestionTemplate, IValidatableObject 
    { 
     public MultipleChoiceQuestionTemplate() { ... } 

     [DisplayName("Question")] 
     public string QuestionText { get; set; } 
     public List<string> Choices { get; set; } 

     [DisplayName("Correct Choice")] 
     public int CorrectChoice { get; set; } 

     public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
     { 
      if (String.IsNullOrEmpty(Choices5[CorrectChoice])) 
      { 
       yield return new ValidationResult("ERROR"); 
      } 
     } 
    } 

這裏是我的jQuery提交功能:

  $("#editQuestionForm").submit(function() { 
       if ($(this).valid()) { 
        $.ajax({ 
         url: this.action, 
         type: this.method, 
         data: $(this).serialize(), 
         success: function (result) { 
          $('#result').html(result); 
         } 
        }); 
       } 

       return false; 
      }); 

但我什麼東西,因爲你可以在上面看到,我已經實現ValidatableObject接口,當我點擊提交按鈕,執行一篇文章,當我的驗證模型有錯誤,並應在ValidationSummary顯示錯誤。

+0

_ 「我什麼事」 _? 〜請澄清你的問題的語言。謝謝。 – Sparky 2013-03-02 18:32:53

回答

2

您不必擔心submit處理程序,因爲jQuery驗證插件已經有一個建於提交事件處理的回調函數,而這正是你在哪裏應該把你的阿賈克斯。

As per the documentation for the Validate plugin,該submitHandler回調函數是:

「回調處理實際當表單有效提交獲取 形式作爲唯一的參數替換默認提交右 。驗證後,通過Ajax提交表單。「

試試這個代碼,而不是:

$(document).ready(function() { 

    $("#yourform").validate({ 
     // rules & options, 
     submitHandler: function (form) { 
      $.ajax({ 
        url: form.action, 
        type: form.method, 
        data: $(form).serialize(), 
        success: function (result) { 
         $('#result').html(result); 
        } 
      }); 
      return false; // blocks redirect after submission via ajax 
     } 
    }); 

}); 

DEMO:http://jsfiddle.net/sx26b/