[英]Problem with remote validation in asp.net mvc 3
我有一個人物模型
public class Person
{
public int ID { get; set; }
[Required]
[Remote("UserNameExists", "People", "Username is already taken.")]
public string Name { get; set; }
[Required]
public string LastName { get; set; }
}
這是我的UserNameExists方法
public JsonResult UserNameExists(string name)
{
bool exists = personRepository.GetPersonByName(name.Trim());
if (!exists)
return Json(true, JsonRequestBehavior.AllowGet);
return Json(string.Format("{0} is not avavfddvilable.", name),
JsonRequestBehavior.AllowGet);
}
當我啟用Javascript時,它可以正常工作,但是當我禁用JavaScript時,則不執行此規則...
為什么是這樣?
請幫忙。
編輯預期行為:
根據msdn的說法,即使沒有Javacript,也應遵守此規則
- (可選)在瀏覽器中禁用客戶端腳本,再次運行頁面,然后輸入違反驗證約束的數據。
當您離開包含無效數據的字段時,您不會看到驗證錯誤,因為腳本被禁用。 由於ASP.NET MVC使用的是兼容的JavaScript,因此看不到客戶端腳本錯誤。 但是,提交表單時將執行服務器端驗證。 (使用禁用了腳本的瀏覽器測試Web應用程序是一個好習慣。)
請參閱我的MSDN文章如何:在ASP.NET MVC中實現遠程驗證我在禁用JavaScript的情況下,使用HttpPost Create方法中的遠程客戶端驗證代碼來測試服務器端。
[HttpPost]
public ActionResult Create(CreateUserModel model) {
// Verify user name for clients who have JavaScript disabled
if (_repository.UserExists(model.UserName)) {
ModelState.AddModelError("UserName", ValidationController.GetAltName(model.UserName, _repository));
return View("Create", model);
}
您必須在服務器上復制一個驗證調用-根據我的測試,該調用不起作用。 請參閱我的文章: ASP.NET MVC 3中的DRY遠程驗證
聽起來您已禁用了JavaScript,並且遠程驗證失敗。
遠程驗證需要在瀏覽器中啟用JavaScript。 它使用jQuery和AJAX調用來完成此任務。
MSDN的報價正是您正在觀察的內容:
您沒有看到驗證錯誤
提交表單時執行服務器端驗證
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.