1

usingValidationSummaryを実行すると、なぜ動作しないのかわかりません。Html.BeginFormAJAX.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

submitjQuery Validate プラグインには既にサブミット イベント ハンドラー コールバック関数が組み込まれているため、ハンドラーについて心配する必要はありません。これはまさにajax を配置する場所です。

Validate プラグインのドキュメントによると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 に答える