我想實現遠程客戶端驗證來檢查用戶名是否已被佔用。我已閱讀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始終顯示驗證消息。我在這裏做錯了什麼?
如果您的IsUsernameAvailable()調用正確返回true/false?另外,請發佈您的控制器代碼。 – rboarman 2010-11-13 20:19:10
是的,它返回正確的值。我已經發布了我的操作方法的代碼。 – Kumar 2010-11-13 21:49:53
我想使用遠程屬性..從你的答我有一個主意,但你可以告訴我..這是微軟在MVC2中可用嗎? – Niks 2013-10-01 11:19:06