我有个人模特
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的良好实践 应用程序与浏览器有 禁用脚本。)
答案 0 :(得分:2)
请参阅我的MSDN article How to: Implement Remote Validation in ASP.NET MVC我在HttpPost Create方法中使用远程客户端验证代码来禁用JavaScript时测试服务器端。
[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);
}
答案 1 :(得分:1)
您必须在服务器上复制验证调用 - 这不符合我的测试所述。 看我的帖子: DRY Remote Validation in ASP.NET MVC 3
答案 2 :(得分:0)
听起来您已禁用JavaScript,并且您的远程验证失败。
远程验证需要在浏览器中启用JavaScript。它使用jQuery和AJAX调用来完成这项工作。
来自MSDN的引用正是您所观察到的:
您没有看到验证错误
提交表单时执行服务器端验证