0

我有一个人物模型

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 应用程序。)

4

3 回答 3

2

请参阅我的MSDN 文章 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);
        }
于 2011-05-06T23:07:25.653 回答
1

您必须在服务器上复制一个验证调用 - 根据我的测试,这不能正常工作。请参阅我的帖子: ASP.NET MVC 3 中的 DRY 远程验证

于 2011-05-05T23:33:46.247 回答
0

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

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

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

您没有看到验证错误

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

于 2011-05-05T22:37:31.937 回答