【问题标题】:Exclude Control from Page.Isvalid从 Page.Isvalid 中排除控件
【发布时间】:2010-08-16 22:34:40
【问题描述】:

我在一个页面上有几个控件都在同一个验证组中。根据某些条件,可以将这些控件之一设置为 visible=false(并且用户将无法在其中输入任何内容)。如果发生这种情况,有没有办法从验证组中删除所述控件?像这样的代码:

if(testControl.Visible==false) testControl.ValidationGroup="";

什么都不做。然而,如果我像这样从 aspx 页面中删除验证组:

<asp:RequiredFieldValidator ID="testControl" runat="server" validationgroup=""></asp:RequiredFieldValidator> 

页面将验证。有没有办法解决这个问题?

【问题讨论】:

  • 只是一个建议,将其设置为 Visible="false" 有什么作用吗?
  • 是的。当设置为 false 时,控件不会显示在页面上
  • 是的,但它也没有验证?
  • 你贴的代码有错误:不可见,可见。
  • 您的RequiredFieldValidator 不应该有一个属性 ControlToValidate="testControl" 吗?

标签: asp.net


【解决方案1】:

您确定您的代码在代码隐藏文件中被命中了吗?我的意思是,当您检查该条件时,您的控件真的不可见吗?

if(testControl.Visible == false)
   testControl.ValidationGroup = string.Empty;

testControl.ValidationGroup=""; 中放一个断点,看看调试器是否停在那里。

上面的代码在哪里?例如,它应该在 PageLoad 方法中。

在该代码之后调用Page.Validate("NameOfYourValidationGroup")

我认为这里有什么问题:

您将此testControl 设置为Visible = False,然后您将其发回服务器。当您执行testControl.ValidationGroup = string.Empty 时,它不会有任何效果,因为它已经回发到服务器:

来自MSDN

TextBox..::.ValidationGroup 属性

获取或设置控件组 TextBox 控件导致的 当它回发到 服务器。

这样,当您将控件设置为Visible = false 时,您应该调用此代码testControl.ValidationGroup = string.Empty;,这样当页面再次为用户加载时,控件不会被分配给该ValidationGroup。现在,如果您回发页面,它应该验证您想要的方式。

也设置testControl.CausesValidation = false

【讨论】:

  • 试过了。调试器确实检查了 testControl.ValidationGroup="";因此我的困惑
  • 目前,一个随机函数。但是我在初始化和页面加载中都试过了......没有成功
  • 您确定您稍后不会在代码中为该控件分配验证组吗?
  • 它没有分配到其他任何地方(至少我能找到)。立即尝试预渲染
  • 只是为了确定:当您将该代码放入 PageLoad 方法时,调试器会停在那里吗?您的控件可见 == false?
【解决方案2】:

以下有帮助吗?:

testControl.IsValid = true;

用于前。与:

Page.Validate();
// manual override of specific control
testControl.IsValid = true;

// Guard
if (! Page.IsValid) return; // Or do own custom logic
// else
// Do your stuff here...

【讨论】:

    猜你喜欢
    • 2021-10-23
    • 2011-04-24
    • 2011-09-29
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多