2010-11-13 70 views
0

我想实现远程客户端验证来检查用户名是否已被占用。我已阅读phil haack's后和msdn article,并拿出了下面的实现:使用ASP.NET MVC2和jQuery远程验证

public class RemoteAttribute : ValidationAttribute 
    { 
     public string Action { get; set; } 
     public string Controller { get; set; } 

     public override bool IsValid(object value) 
     { 
      return true; 
     } 
    } 


public class RemoteValidator : DataAnnotationsModelValidator<RemoteAttribute> 
{ 

    public RemoteValidator(ModelMetadata metadata, ControllerContext context, RemoteAttribute validationAttribute) : 
     base(metadata, context, validationAttribute) 
    { 
    } 

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules() 
    { 
     var rule = new ModelClientValidationRule 
              { 
      ErrorMessage = Messages.DuplicateUsername, 
      ValidationType = "remote" 
     }; 

     rule.ValidationParameters.Add("url", Attribute.Controller + "/" + Attribute.Action); 
     return new[] { rule }; 
    } 
} 

我的视图模型类具有远程属性如下:

[Remote(Controller = "SignUp",Action = "IsUsernameAvailable")] 
    public string Username { get; set; } 

我使用jQuery的验证如下:

jQuery.validator.addMethod("remote", function (value, element, params) { 
    if (this.optional(element)) { 
     return true; 
    } 

    if (value != '') { 
     $.post(params.url, { username: value }, function (response) { 
      return response; 
     }); 
    } 

}); 

在我的控制器我有一些操作方法如下:

public JsonResult IsUsernameAvailable(string userName) 
    { 
     var isUsernameAvailable = _userService.IsUsernameAvailable(userName); 
     if (isUsernameAvailable) 
     { 
      return Json(true); 
     } 

     return Json(false); 
    } 

由于某些原因,即使强硬我的actiom方法IsUsernameAvailable返回true始终显示验证消息。我在这里做错了什么?

+0

如果您的IsUsernameAvailable()调用正确返回true/false?另外,请发布您的控制器代码。 – rboarman 2010-11-13 20:19:10

+0

是的,它返回正确的值。我已经发布了我的操作方法的代码。 – Kumar 2010-11-13 21:49:53

+0

我想使用远程属性..从你的答我有一个主意,但你可以告诉我..这是微软在MVC2中可用吗? – Niks 2013-10-01 11:19:06

回答

0

您的调用RemoteAttribute.IsValid()始终返回true。添加您的IsUsernameAvailable检查并根据需要返回true或false。

IsValid()函数告诉模型是否触发错误。

0

尝试发送字符串 “真” 与 “假”,而不是与

return Content("true") 

return Content("false"); 
0

JSON值尝试JSON(真,JsonRequestBehavior.AllowGet);或Json(false,JsonRequestBehavior.AllowGet);