远程验证

远程验证用于通过向服务器端发送 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);         
} 

现场演示小提琴

你可以使用 RemoteAttributeAdditionalFields 属性将模型的其他属性传递给控制器​​方法。典型的情况是以编辑形式传递模型的 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 时覆盖默认错误消息。