gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:18 25 4
gpt4 key购买 nike

假设我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com