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