远程验证
远程验证用于通过向服务器端发送 ajax 请求来检查输入控件中输入的内容是否有效
工作
RemoteAttribute
通过从客户端向控制器动作进行 AJAX 调用来工作,并且该字段的值被验证。然后,控制器动作返回指示验证成功或失败的 JsonResult
响应。从你的操作返回 true
表示验证已通过。任何其他值表示失败。如果返回 false
,则使用属性中指定的错误消息。如果返回其他任何内容,例如字符串甚至整数,它将显示为错误消息。除非你需要将错误消息设置为动态消息,否则返回 true 或 false 并让验证程序使用属性上指定的错误消息是有意义的。
视图模型
public class ViewModel
{
[Remote("IsEmailAvailable", "Group", HttpMethod = "POST", ErrorMessage = "Email already exists. Please enter a different email address.")]
public string Email{ get; set; }
}
调节器
[HttpPost]
public JsonResult IsEmailAvailable(string Email)
{
// Logic to check whether email is already registered or Not.
var emailExists = IsEmailRegistered();
return Json(!emailExists);
}
你可以使用 RemoteAttribute
的 AdditionalFields
属性将模型的其他属性传递给控制器方法。典型的情况是以编辑形式传递模型的 ID 属性,以便控制器逻辑可以忽略现有记录的值。
模型
public int? ID { get; set; }
[Display(Name = "Email address")]
[DataType(DataType.EmailAddress)]
[Required(ErrorMessage = "Please enter you email address")]
[Remote("IsEmailAvailable", HttpMethod="Post", AdditionalFields="ID", ErrorMessage = "Email already exists. Please enter a different email address.")]
public string Email { get; set; }
调节器
[HttpPost]
public ActionResult Validate(string email, int? id)
{
if (id.HasValue)
{
return Json(!db.Users.Any(x => x.Email == email && x.ID != id);
}
else
{
return Json(!db.Users.Any(x => x.Email == email);
}
}
附加说明
默认错误消息可以理解为模糊,因此请始终记住在使用 RemoteAttribute
时覆盖默认错误消息。