-1

我的Html代码以及Javascript代码如下。在UserController的每次显示错误消息。在MVC项目中使用Jquery验证器

<h2>Register</h2> 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 

    <fieldset class="acloginform"> 
     <legend>Register User</legend> 

     <ol> 
      <li> 
       <div class="editor-label"> 
        @Html.LabelFor(model => model.Email_Id) 
       </div> 
       <div class="editor-field"> 
        @Html.TextBoxFor(model => model.Email_Id, new { @id = "txt_EmailId" }) 
        @Html.ValidationMessageFor(model => model.Email_Id) 
       </div> 
      </li> 
      <li> 
       <div class="editor-label"> 
        @Html.LabelFor(model => model.FirstName) 
       </div> 
       <div class="editor-field"> 
        @Html.TextBoxFor(model => model.FirstName) 
        @Html.ValidationMessageFor(model => model.FirstName) 
       </div> 
      </li> 
      <li> 
       <div class="editor-label"> 
        @Html.LabelFor(model => model.LastName) 
       </div> 
       <div class="editor-field"> 
        @Html.TextBoxFor(model => model.LastName) 
        @Html.ValidationMessageFor(model => model.LastName) 
       </div> 
      </li> 
      <li> 
       <div class="editor-label"> 
        @Html.LabelFor(model => model.Password) 
       </div> 
       <div class="editor-field"> 
        @Html.EditorFor(model => model.Password) 
        @Html.ValidationMessageFor(model => model.Password) 
       </div> 
      </li> 
      <li> 
       <div class="editor-label"> 
        @Html.LabelFor(model => model.ConfirmPassword) 
       </div> 
       <div class="editor-field"> 
        @Html.EditorFor(model => model.ConfirmPassword) 
        @Html.ValidationMessageFor(model => model.ConfirmPassword) 
       </div> 
      </li> 
      <li> 
       <input type="submit" value="Register" /> 
       @Html.ActionLink("Back to Home Page", "Index", new { Controller = "Home" }, new { @class = "regislnk" }) 
      </li> 
     </ol> 
    </fieldset> 
} 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

<script type="text/javascript"> 

    $(document).ready(function() {   

     jQuery.validator.addMethod("Duplicate_EmailId", function (value) { 
      $.ajax({ 
       url: '/User/CheckEmailId?EmailId=' + value, 
       async: false, 
       success: function (data) { 
        alert(data); 
        if (data == true) 
         return false; 
        else 
         return true; 
       }, 
      });   


     }, "Email Id already Exists"); 

     $('#txt_EmailId').addClass('Duplicate_EmailId');  
    }); 

</script> 

我的C#方法是

public JsonResult CheckEmailId(string EmailId) 
{ 
    var res = my method; 
    return Json(res, JsonRequestBehavior.AllowGet); 
} 

以下错误消息在每个结果成功/失败显示。并且该方法称为

两次。模糊的文本框以及表单提交。

+0

你的HTML代码在哪里? – NetStarter 2013-04-08 13:20:54

+1

更新的问题与HTML – Kartheek 2013-04-08 13:30:07

+0

你先做这个警报(数据),然后再次检查数据==真或不假,并返回false?我认为它需要===如果你想比较真实。 – NetStarter 2013-04-08 13:37:30

回答

0

你眼前的问题是,你没有返回从您的验证方法什么,所以就是喜欢返回false

jQuery.validator.addMethod("Duplicate_EmailId", function (value) { 

    // returning nothing here, means validation fails 

}, "Email Id already Exists"); 

你而不是从验证方法返回真/假从AJAX方法,你需要像这样

jQuery.validator.addMethod("Duplicate_EmailId", function (value) { 

    var validationResult = false; 

    $.ajax({ 
     url: '/test/CheckEmailId?EmailId=' + value, 
     async: false, 
     success: function (data) { 
      console.log(data); 
      if (data == true) 
       validationResult = false; 
      else 
       validationResult = true; 
     }, 
    }); 

    return validationResult; 

}, "Email Id already Exists"); 

我会说,把异步假像,这是不理想的,因为它会在其他领域填补禁用用户,而Ajax调用是由。有一些聪明的东西已经进入了远程方法的实现,因此它可能是异步的。如果您可以使用它,请使用插件的远程方法。

相关问题