【问题标题】:Do validations still fire in ASP.NET even if the controls are hidden?即使控件被隐藏,验证仍然在 ASP.NET 中触发吗?
【发布时间】:2010-06-02 23:10:53
【问题描述】:

我有一个使用 ASP.NET 验证的表单。我在 aspx 中使用一些内联 C# 来根据用户的角色显示/隐藏某些控件。我会使用 Visible 属性,但它们太多了,我只是决定使用内联 C# 来显示和隐藏(我知道,这不是最佳实践,但请耐心等待)。当我提交表单时(某些字段被隐藏时),我遇到了 Page.IsValid 始终设置为 False 的问题。

即使控件甚至没有在页面上呈现,验证仍然会触发吗?另外,如果不是这种情况,是否有一种有效的方法来分解 Page.IsValid 以找出将其设置为 False 的原因?

【问题讨论】:

  • 内联c#是什么意思?您是否设置显示:无?我不太清楚你在做什么
  • -- 显示某些 html

标签: asp.net validation


【解决方案1】:

如果您将 Visible 设置为 false,则该控件的验证将不会触发。来自ASP.Net Validation in Depth

为什么不直接使用 Visible=false 一个隐形的验证器?在 ASP.NET 中 控件的可见属性具有 非常强烈的意思:一个控制 Visible=false 不会被处理 全部用于预渲染或渲染。作为 由于这种更强烈的意义, Visible=false 表示验证器 不仅不显示 什么,它不起作用 任何一个。不评价,不评价 影响页面有效性,不放 摘要中的错误。

如果您希望控件验证但将其隐藏在页面上,请使用 CSS 将显示设置为无。

【讨论】:

  • 感谢您的回复。这完全有道理。我是否需要在验证和实际控件本身上设置 Visible 属性?还是只是验证?我对此有点慌张,因为我的页面正在执行 PostBack,并且我有大约 10 个必需的字段验证器(隐藏)没有被解雇。如果您只是使用 CSS 隐藏 HTML,它是否只会触发自定义/服务器端验证?请指教。
【解决方案2】:

验证器仍会触发,您也需要隐藏它们

【讨论】:

  • 所以你是说我需要在所有这些上将 Visible 属性设置为 false?
  • 是的,如果您在数据绑定上下文中,您可以将可见性绑定到属性。
  • 好的,谢谢。唯一的事情是,我猜如果验证在幕后被触发,必填字段验证器甚至会阻止表单被提交(我的情况并非如此)。有什么想法吗?
  • 是的,这很奇怪,我只是用 requiredfieldvalidator 和一个不可见的文本框制作测试页,然后页面被提交,回发后出现 ErrorMessage
【解决方案3】:

如果它试图验证的内容不可见,则控件验证不会触发。可见=“假”

但它仍然会验证它,您改为在该控件上执行 hidden="true" 以便它不会显示给用户但希望它验证它。

【讨论】:

    【解决方案4】:

    是的,如果验证器隐藏在客户端,它们将被触发。

    如果验证器及其控件通过使用 display="none" 或 visibility="hidden" CSS 属性在客户端隐藏,则验证器仍将在客户端和服务器端触发。

    如果您希望验证器不在客户端和服务器端评估/触发,则必须在代码隐藏中的验证器上设置以下任一属性:Visible="false"Enabled="false"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 2011-02-13
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      相关资源
      最近更新 更多