asp.net mvc 3中的远程验证问题

时间:2011-05-05 22:33:11

标签: c# asp.net-mvc-3 validation remote-validation

我有个人模特

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,它也应该尊重这条规则

  
      
  1. (可选)在浏览器中禁用客户端脚本,再次运行该页面,   并输入违反的数据   验证约束。
  2.         

    当你离开包含的字段时   无效的数据,你没有看到   验证错误,因为脚本是   禁用。因为ASP.NET MVC正在使用   不引人注目的JavaScript,你没看到   客户端脚本错误。然而,   执行服务器端验证   当您提交表格时。 (它是一个   测试Web的良好实践   应用程序与浏览器有   禁用脚本。)

3 个答案:

答案 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的引用正是您所观察到的:

  

您没有看到验证错误

     

提交表单时执行服务器端验证