加工
该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) { // 检查电子邮件是否已注册的逻辑。 var emailExists = IsEmailRegistered(); return Json(!emailExists); }
现场演示小提琴
您可以使用的AdditionalFields属性将模型的其他属性传递给控制器方法RemoteAttribute。典型的场景是以“编辑”形式传递模型的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。