1

私たちのアプリは ASP.NET MVC 3 を使用しており、クライアント側とサーバー側の両方で機能するカスタム検証属性の作成を利用したいと考えていました。

ユーザーは入力フィールドに医師番号を入力します。この値は、入力された医師番号が実際に有効かどうかを確認するために使用されます。これには、データベースへの呼び出しが必要です。検証メソッド内に ajax 呼び出しがあります。これは正常に機能しますが、async が false に設定されている場合のみです。

<script type="text/javascript">
    $.validator.setDefaults({
        debug: true,
        onkeyup: false,
        onclick: false,
        focusInvalid: false
    })

    $.validator.addMethod('physician', function (value, element, params) 
    {
        var request = $.ajax({
            type: "POST",
            url: "@Url.Content("~/patient/GetPhysicianById")",
            data: { physicianNumber: value },
            async: false,
            beforeSend: function(xjhr, settings) {                                                                            
                var siblings = $(element).siblings('.physician-response');                    
                //$(siblings[0]).html("<img src=\"/content/images/ajax-loader.gif\" />");            
            }                
        });

        console.log(request);            

        if(request.responseText == "0")
            return false;

        return true;
    });

    $.validator.unobtrusive.adapters.add('physician', ['param1', 'param2'], function (options) {
        options.rules['physician'] = options.params;
        options.messages['physician'] = options.message;
    });

</script>

フォームには、このメソッドをトリガーする 3 つの異なる医師の入力があります。ぼかしが失われるたびに、これらの呼び出しが再度実行されます。ユーザーが保存をクリックしたときにも実行されます。これが本当に適切なアプローチであるかどうかはわかりません。または、この検証を別の方法で処理する必要があります。

4

2 に答える 2

0

最も一般的な方法は、クライアントよりもサーバーでより厳密な検証を行うことです。

したがって、郵便番号はクライアントの正規表現に対して検証されますが、サーバーからの郵便番号サービスに対してチェックされます。またはそのようなもの。この理由は、ほとんどの一般的なエラーはサーバー ラウンドトリップなしで修正できるためですが、後で再訪する必要がある間違いをユーザーが犯していないことを確認するのは良いことです。

これがあなたのケースにとって良い習慣であるかどうかはあなた次第です。

于 2012-10-23T19:48:53.923 に答える
0

[Remote]この種の検証を実行するには、属性を調べてください。

于 2012-10-23T19:46:05.807 に答える