我想实现远程客户端验证来检查用户名是否已被占用。我已阅读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