2010-11-13 103 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);