ASP.NET中Panel服务器控件的隐藏与显示应该注意的问题

在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中直接拿来。

None.gif          ' ----------------------------------------------------------------
None.gif
         '  Sub ShowPanel:
None.gif
         '    Helper sub used to make certain that the validators do not 
None.gif
         '     fire when their parent panel is not visible.
None.gif
         ' ----------------------------------------------------------------
ExpandedBlockStart.gifContractedBlock.gif
         Public   Shared   Sub ShowPanel() Sub ShowPanel(ByRef panel As Panel, ByVal visible As Boolean)
InBlock.gif            
Dim validator As IValidator
InBlock.gif            
Dim ctrl As Control
InBlock.gif
InBlock.gif            
For Each ctrl In panel.Controls
InBlock.gif                
'check to see if its a validator
InBlock.gif
                If TypeOf ctrl Is IValidator Then
InBlock.gif                    validator 
= CType(ctrl, IValidator)
InBlock.gif                    ctrl.Visible 
= visible
InBlock.gif                    
If Not visible Then
InBlock.gif                        validator.Validate()
InBlock.gif                    
End If
InBlock.gif                
End If
InBlock.gif            
Next
InBlock.gif            panel.Visible 
= visible
ExpandedBlockEnd.gif        
End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值