【问题标题】:How to perform a Html.ValidationSummary in an ajax submit?如何在 ajax 提交中执行 Html.ValidationSummary?
【发布时间】:2013-03-02 17:59:36
【问题描述】:

当我使用AJAX.submit 执行Html.BeginForm 时,我不知道为什么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 接口,当我点击提交按钮时,当我的验证模型有错误时执行一个帖子,并且应该在@中显示错误987654327@.

【问题讨论】:

  • “我是什么东西” ? 〜请澄清你的问题的语言。谢谢。

标签: jquery asp.net asp.net-mvc asp.net-mvc-4 jquery-validate


【解决方案1】:

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

As per the documentation for the Validate pluginsubmitHandler的回调函数为:

"表单有效时处理实际提交的回调。获取 形式作为唯一的论据。替换默认提交。 权利 验证后通过 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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2018-05-16
    相关资源
    最近更新 更多