【问题标题】:Problem with remote validation in asp.net mvc 3asp.net mvc 3中的远程验证问题
【发布时间】:2011-05-05 22:33:10
【问题描述】:

我有一个人模型

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. (可选)在浏览器中禁用客户端脚本,再次运行页面, 并输入违反 验证约束。

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

【问题讨论】:

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


    【解决方案1】:

    查看我的MSDN article How to: Implement Remote Validation in 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);
            }
    

    【讨论】:

      【解决方案2】:

      您必须在服务器上复制一个验证调用 - 这不像我的测试中概述的那样工作。 请参阅我的帖子: DRY Remote Validation in ASP.NET MVC 3

      【讨论】:

      • btw.. 我有一个用于远程验证设置的示例项目 - 请参阅:completedevelopment.blogspot.com/2011/08/… 请注意,它不会像本文中要求的那样在帖子上仔细检查验证,它只是一个基本演示。跨度>
      【解决方案3】:

      听起来您禁用了 JavaScript,并且您的远程验证失败。

      远程验证需要在浏览器中启用 JavaScript。它使用 jQuery 和 AJAX 调用来完成这项工作。

      来自 MSDN 的引用正是您所观察到的:

      您没有看到验证错误

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

      【讨论】:

      • 那么我需要复制代码以使服务器也执行此规则?
      猜你喜欢
      • 2012-03-30
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      相关资源
      最近更新 更多