【问题标题】:How does validation in ASP.NET MVC 2 actually work?ASP.NET MVC 2 中的验证实际上是如何工作的?
【发布时间】:2010-12-07 13:41:02
【问题描述】:

我正在尝试追查为什么我的 ASP.NET MVC 2 验证不起作用,但我找不到足够的信息来了解它是如何工作的。

我已按照useful article by David Hayden 中的步骤进行操作,这似乎是目前最好的文档,但实际上什么也没发生。

当我提交到服务器时我得到了验证(就像我从预览 1 开始向我的模型添加数据注释时所做的那样),但我没有得到任何客户端验证。

我如何追踪测试?到目前为止,我已经验证了以下明显的事情

  • 正在下载 MicrosoftMvcJQueryValidation.js 和 jquery.validate.min.js 文件
  • Html.ClientValidationEnabled = true

我无法轻易看出什么与哪些事件相关联,以了解如何调试它。

【问题讨论】:

    标签: asp.net-mvc validation jquery-validate


    【解决方案1】:

    这是我学到的:

    最重要的

    • 您的 HTML 表单必须使用 using 指令创建,而不仅仅是 BeginForm 和 EndForm。
    • 您必须在启动“表单”之前设置 Html.ClientValidationEnabled = true
    • 您必须为每个字段使用 Html.ValidationMessage
    • 您必须在每个部分控件 (ascx) 上设置 Html.ClientValidationEnabled = true

    它是如何工作的(非常简单的概述)

    • 当您执行 Html.BeginForm 时,它会在 ViewContext 中创建一个“FormContext”
    • 当使用 ValidationMessage 助手时,元数据被放入表单上下文中
    • 当表单被处理(通过 using 语句)时,它会写出所有的验证代码

    杂项

    • 当我有一个部分控件时,如果该控件使用与定义表单的视图不同的模型,我似乎无法进行验证。

    • 您不需要使用 Html.TextBoxFor 或 Html.ValidationMessageFor,您可以使用 Html.TextBox 和 Html.ValidationMessage

    【讨论】:

      【解决方案2】:

      为了在客户端验证字段,您必须在视图中为该字段指定对 Html.ValidationMessage/Html.ValidationMessageFor 的调用(就像 David 在您链接的教程中所做的那样)。这本质上是一个触发客户端验证逻辑的触发器,您希望为该字段运行验证。

      如果在某些情况下,您实际上并不希望每个字段都以可视方式显示验证消息(即通过使用 Html.ValidationMessage),而是希望将摘要作为验证错误消息的唯一来源(即通过使用 Html.ValidationSummary),您仍然需要某种方式来“触发”您想要的特定字段的验证。这可以通过在您的视图中使用 Html.Validate/Html.ValidateFor 方法来实现。这些助手不会渲染任何东西,而只会注册指定的字段以进行客户端验证。

      这两个要求都存在,因为您可能不希望客户端验证自动验证模型对象上的每个属性,因为其中一些甚至可能不是您想要验证的表单的一部分。

      【讨论】:

        猜你喜欢
        • 2015-01-30
        • 1970-01-01
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-21
        • 2011-09-27
        • 2021-12-16
        相关资源
        最近更新 更多