ASP.Net MVC:AJAX / jQuery呼び出しでデータ注釈/検証を使用できますか?

ajax asp.net-mvc data-annotations
ASP.Net MVC:AJAX / jQuery呼び出しでデータ注釈/検証を使用できますか?

AJAX / jQuery呼び出しでデータ注釈/検証を使用できますか? その場合は、例または例を示す投稿を提供してください。

基本的に、データ注釈の使用方法の例を見てきましたが、完全なポストバックがありました。 AJAX / jQuery呼び出しを行う方法はありますか? クライアント側でModelオブジェクトをどのように構築するかわからないので、これをどのように行うかわかりません。 (これはあなたがしなければならないことだと思います。)

誰かがこれはできると言ったが、どうすればいいかわからない。

ご協力いただきありがとうございます。

  4  7


ベストアンサー

はい-100%いつもやります。 Ajax.BeginFormを使用し、控えめな検証を使用しますhttp://completedevelopment.blogspot.com/2011/02/unobstrusive-javascript-in-mvc-3-helps.html

これにより、クライアント側に必要なすべてが出力されます。 ただし、検証に必要なコンテンツをロードしたことをjQueryに伝えるには、バリデーターを再度接続する必要があります

私はこのアイデア/コードをhttp://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/から入手したと信じています

どちらの方法でも、以下にあるものが機能し、現在デバッグを少し追加していますが、現在使用しています。

(function ($) {
    $.validator.unobtrusive.parseDynamicContent = function (selector) {

        var len = $(selector).length;

        //alert('got length');
        if ($(selector).length == 0) {
            alert('The selector (usually a div) passed in as the root level to start validation parsing at (rather than parsing the whole document again) could not be found in the DOM. Validation on this form will not likely continue. The selector parameter is:' + selector);
            return;
        }
        //use the normal unobstrusive.parse method
        $.validator.unobtrusive.parse(selector);

        //get the relevant form
        var form = $(selector).first().closest('form');
        if (form.length == 0) {
            alert('Could not find a form that was a parent of selector:' + selector + '\nValidation may not work properly');
            return;
        }


        //get the collections of unobstrusive validators, and jquery validators
        //and compare the two
        var unobtrusiveValidation = form.data('unobtrusiveValidation');
        //alert(unobtrusiveValidation.length);
        var validator = form.validate();

        $.each(unobtrusiveValidation.options.rules, function (elname, elrules) {
            if (validator.settings.rules[elname] == undefined) {
                var args = {};
                $.extend(args, elrules);
                args.messages = unobtrusiveValidation.options.messages[elname];
                //$('[name=' + elname + ']').rules("add", args);
                $('[name="' + elname + '"]').rules("add", args);
            } else {
                $.each(elrules, function (rulename, data) {
                    if (validator.settings.rules[elname][rulename] == undefined) {
                        var args = {};
                        args[rulename] = data;
                        args.messages = unobtrusiveValidation.options.messages[elname][rulename];

                        $('[name="' + elname + '"]').rules("add", args);
                    }
                });
            }
        });

    }
})($);

次に、ajaxを使用してロードする部分ビュー(またはページ)ごとに、次のようにします(editCustomerAddressは新しいコンテンツを含むdiv名であるため、jQueryはページ上の_everything_を再解析する必要はありませんが、動的コンテンツからのみ)

        try {
            //Since this may have been loaded as dynamic content ensure jQuery client validation knows we should be validating the content in this view.
            //jQuery validation runs when the original page loads - on the original content and not on dynamic (in this case ajax) content.
            //We don't need to validate the whole form again, only from this div down.

            //if I have a problem in jQuery 5, then try: $.validator.unobtrusive.parse("#editZone > div > form");
            $.validator.unobtrusive.parseDynamicContent('#editCustomerAddress');
        }
        catch (err) {
            alert('An error occured trying to tell jQuery to validate our new content. Ensure the code for parseDynamicContent has been included and you are referencing a valid element. Also, ensure the form has a context if it is a partial view by calling if (ViewContext.FormContext == null){ViewContext.FormContext = new FormContext();}  If that code is not present, data-val-* attributes will not be rendered.\n' + err);
        }

また、-独自のajaxまたはhtmlフォームを持たないパーシャルビューを確認するには、フォームコンテキストが必要です。

@ \ {if(ViewContext.FormContext == null)\ {ViewContext.FormContext = new FormContext(); }

そうしないと、ヘルパーメソッドによってdata-val- *属性が発行されません。 ビューに独自のフォームコンテキストを作成するためのAjax.BeginFormまたはHtml.BeginFormがない場合、これが必要です。

7


Html.BeginFormの代わりにHtml.AjaxFormを使用すると、Ajaxを使用して検証されます。

ただし、jQueryを使用して検証できるとは思わない。 Microsoftには独自のAjaxライブラリがあり、彼らはそれを自分で呼び出し/保守します。 間に独自のコードをフックできるとは思わない。

1


タイトルとURLをコピーしました