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>

在表格上,有三种不同的医生输入将触发此方法。每次模糊丢失时,它都会再次运行这些调用。当用户单击保存时也会运行。我不确定这是否真的是正确的方法,或者我应该以单独的方式处理此验证。

4

2 回答 2

0

您可能会查看[Remote]执行此类验证的属性。

于 2012-10-23T19:46:05.807 回答
0

最常见的做法是在服务器上进行比在客户端上更严格的验证。

因此,邮政编码是针对客户端上的正则表达式进行验证的,但会针对来自服务器的邮政编码服务进行检查。或类似的东西。这样做的原因是大多数常见的错误可以在没有服务器往返的情况下修复,但如果你绕过它,最好确保用户没有犯任何需要稍后重新访问的错误。

这是否适合您的情况取决于您自己。

于 2012-10-23T19:48:53.923 回答