1

我不知道为什么ValidationSummary在我执行Html.BeginFormusing时不工作AJAX.submit

@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.

4

1 回答 1

2

您无需担心submit处理程序,因为 jQuery Validate 插件已经内置了提交事件处理程序回调函数,而这正是您应该放置 ajax 的地方。

根据 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
        }
    });

});

演示:http: //jsfiddle.net/sx26b/

于 2013-03-02T18:06:41.093 回答