遠端驗證

遠端驗證用於通過向伺服器端傳送 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 時覆蓋預設錯誤訊息。