asp.net-mvc 远程验证

示例

远程验证用于通过向服务器端发送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)
{
    // 检查电子邮件是否已注册的逻辑。
    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。