mvc3中的jQuery移动自定义验证

时间:2012-07-08 11:23:38

标签: jquery asp.net-mvc-3

对于检查电子邮件存在的表单验证我需要自定义验证我试过钱但是没有工作它总是返回电子邮件已经存在我粘贴代码请确认我错误

视图中的jQuery代码

<script type="text/javascript">
        $(document).ready(function () {

             var response;
             //<!-- add vlidator -->
             $.validator.addMethod(
             "unique_email",function(value,element){
                $.ajax({
                url:'SignUp/emailExist',
                type: 'POST',
                data: 'email='+value,
                contentType: 'application/json; charset=utf-8',
                success:function(msg){
                    response = ( msg == 'true' ) ? true : false;
                }              
                })
                return response;
             },"email already exist"
             );
            jQuery.validator.classRuleSettings.unique_email = { unique_email: true };
            $("#register-form").validate({

                submitHandler: function (form) {
                    $('#register-form').submit();
                }
            });


        });
    </script>

jQuery移动代码

<div data-role="fieldcontain">
                <label for="email">
                <em>* </em> Email: </label>
               <label> <input type="text" id="email" 
                    name="email" class="required email unique_email" /></label>                  
            </div>

最后通过ajax

使用的代码
[HttpPost]
        public ActionResult emailExist(string email)
        {
            //here i m checking from db that email exist or not result will return 1 
            //if an email exist and 0 if not so i m return false if i found email that is on 1
            int value = su.isEmailExist(email);
            if (value == 1)
                return Json(new { success = false});
            else
                return Json(new { success = true});
        }

提前致谢

1 个答案:

答案 0 :(得分:1)

由于您的ajax请求是异步的,因此在ajax请求完成之前返回函数时,验证程序将始终返回undefined(或false)。

在函数返回之前,您需要使请求同步以设置响应。您可以通过向ajax请求添加'async:false'参数来实现此目的

async: false

编辑:

您的代码还存在其他问题。您需要添加一个数据类型来告诉JSON您期望JSON响应。此外,成功响应中的msg变量期望一个字符串,但这是不正确的,因为JSON对象的第一个属性是success:。当您使用$.ajax和dataType'json'时,您现在需要将数据作为JSON字符串传递。我测试了以下javascript代码,它似乎工作:

    $(document).ready(function () {

         var response;
         //<!-- add vlidator -->
         $.validator.addMethod(
             "unique_email",function(value,element){
                $.ajax({
                url:'SignUp/emailExist',
                type: 'POST',
                data: "{ email: '" + value + "' }",
                contentType: 'application/json; charset=utf-8',
                success:function(json){
                    response = json.success;
                },
                async: false,
                dataType: 'json'          
                });
                return response;
             },"email already exist"
         );
        jQuery.validator.classRuleSettings.unique_email = { unique_email: true };
        $("#register-form").validate({

            submitHandler: function (form) {
                form.submit();
            }
        });


    });