在ASP.NET中,Panel服务器控件一般用来作为容器控件,来成组的隐藏和显示一些控件,大部分情况下直接设置Panel的visualable属性为True或者False就可以达到目的,但是有一些情况下,例如对整个页面进行validate时,但是在一个隐藏的Panel中,有RequiredValidate控件,它校验的控件由于和Panel一起被隐藏,所以它是无法通过校验的,那么页面的validate由于有一个Validate控件不能通过,自然也不能通过。而我们的初衷是被隐藏的控件是不需要校验的。

要解决这个问题,需要在Panel隐藏时,需要查找Panel中的所有Validate子控件,告诉它们在进行Validate时它们可以忽略,而在显示Panel时,又重新设置。

这种方法比直接隐藏或显示Panel控件消耗更多的资源,所以要区分不同的情况进行使用,如果Panel中没有校验控件,那么直接隐藏或显示Panel控件就可以了,而如果Panel中有校验控件,最好就用本文的方式来隐藏或显示它。

这段代码从.Net Framework SDK的示例Duwamish中直接拿来。

        '----------------------------------------------------------------
        ' Sub ShowPanel:
        '   Helper sub used to make certain that the validators do not 
        '    fire when their parent panel is not visible.
        '----------------------------------------------------------------
        Public Shared Sub ShowPanel(ByRef panel As Panel, ByVal visible As Boolean)
            
Dim validator As IValidator
            
Dim ctrl As Control

            
For Each ctrl In panel.Controls
                
'check to see if its a validator
                If TypeOf ctrl Is IValidator Then
                    validator 
= CType(ctrl, IValidator)
                    ctrl.Visible 
= visible
                    
If Not visible Then
                        validator.Validate()
                    
End If
                
End If
            
Next
            panel.Visible 
= visible
        
End Sub
posted on 2004-10-28 11:58  zhumk  阅读(4012)  评论(1编辑  收藏  举报