我在页面上有一些控件都在同一个验证组中。根据特定条件,可以将其中一个控件设置为visible = false(并且用户无法在其中输入任何内容)。如果发生这种情况,有没有办法从验证组中删除所述控件?像这样的代码:
if(testControl.Visible==false) testControl.ValidationGroup="";
什么都不做。但是,如果我从aspx页面中删除验证组,如下所示:
<asp:RequiredFieldValidator ID="testControl" runat="server" validationgroup=""></asp:RequiredFieldValidator>
该页面将验证。有办法解决这个问题吗?
答案 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...