[英]Remote Validation With ASP.NET MVC2 and jQuery
我正在尝试实现远程客户端验证,以检查用户名是否已被使用。 我已经阅读了phil haack的文章和msdn文章,并提出了以下实现:
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,始终显示验证消息。 我在这里做错了什么?
您的调用RemoteAttribute.IsValid()始终返回true。 添加您的IsUsernameAvailable检查并根据需要返回true或false。
IsValid()函数告诉模型是否触发错误。
尝试发送字符串“ true”和“ false”,而不是json值
return Content("true")
和
return Content("false");
尝试Json(true,JsonRequestBehavior.AllowGet); 或Json(false,JsonRequestBehavior.AllowGet);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.