c# - 在 asp.net MVC 中,Post 后代码的哪一部分显示验证错误?

标签 c# asp.net-mvc validation asp.net-mvc-4

假设我有一个 View 模型。它有一个必需的 Name 属性。而且我禁用了客户端验证。我的操作方法中有这段代码:

     if (!ModelState.IsValid)
        {
            return View(model);
        }

所以,一切正常。它将在发布后突出显示必填字段。但是,我无法理解哪个 jQuery validaion 函数执行此过程? jQuery Validation 如何检测表单已提交一次?

我想找到那个代码,因为我想稍微修改一下。例如,我有自己的助手,它具有自定义验证逻辑。目前,我的自定义助手验证不会在无效发布后显示。而且,我想将我的逻辑添加到内置函数中,但我在任何地方都找不到。

最佳答案

首先,如果您禁用了客户端验证,则 jquery 验证与它无关(您已禁用它!)。简要说明发布和返回 View 时发生的情况。

  1. DefaultModelBinder 初始化您模型的一个新实例
  2. DefaultModelBinder 然后读取表单数据(名称/值对) 如果属性名称与其中一个表单数据值匹配,则其 属性已设置(假设其有效)并且其值也被添加到 模型状态。如果该值无效,则不会设置该属性,但 它的值被添加到 ModelState(attemptedValue) ModelState 错误
  3. 当您返回 View 时,您的 @Html.ValidationMessageFor() 方法 读取 ModelState 值,如果有相关错误 使用该属性,将错误消息添加到生成的 html 中 通过 ValidationMessageFor() 方法和相关的类名 (突出显示)已添加

您可以检查 DefaultModelBinder 的源代码和 ValidationExtensions如果您想查看有关这些工作原理的更多详细信息。

至于“我想找到那个代码,因为我想稍微修改一下”,然后不要。您没有指出您尝试做什么,也没有显示您的 html 帮助程序扩展方法的任何代码,但是 html 帮助程序不(也不应该)包含验证逻辑。他们负责根据属性和应用于该属性的验证属性生成 html。

如果您有属性的自定义验证逻辑,那么您可以创建一个继承自 ValidationAttribute 的属性(如果您还需要客户端验证,那么它还需要实现 IClientValidatable )。创建自己的验证属性的一个很好的指南是 this article .

关于c# - 在 asp.net MVC 中,Post 后代码的哪一部分显示验证错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31570026/

相关文章:

javascript - 如何合并两个 JavaScript 对象字面量

validation - 使用 JSF 捕获每个按键事件的服务器端验证

jquery - 使用动态下拉菜单进行语义 UI 表单验证

c# - 使用 'typeof'和 'is'时,c#如何共享引用类型的泛型实现?

c# - 获取全局目录的 PrincipalContext 的连接服务器

c# - .Net 中的 Async/await --> 调用没有异步实现的服务方法

validation - 使用消息存储拦截器进行 struts2 验证

c# - IIS - 线程池设置 machine.config 与 web.config

c# - 允许操作访问共享上下文(例如 WCF 中的 OperationContext)

android - 使用Azure开发网站,然后为其创建原生iOS和Android应用程序,什么是好的数据架构?