从Page.Isvalid排除控制

时间:2010-08-16 22:34:40

标签: asp.net

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

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

什么都不做。但是,如果我从aspx页面中删除验证组,如下所示:

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

我认为这是什么问题:

您正在使用testControl设置此Visible = False,然后将其发回服务器。当你执行testControl.ValidationGroup = string.Empty时,它将无效,因为它已经回发到服务器:

来自MSDN

  

TextBox .. ::。ValidationGroup Property

     

获取或设置控件组   TextBox控件导致的   验证时它回发到   服务器

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

也设置testControl.CausesValidation = false

答案 1 :(得分:0)

以下是否有帮助?:

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...