2007年11月10日

使用MasterPage後,FindControl找不到物件

過去在.net 1.1的時候,我們會很習慣的去使用FindControl,利用Control Id來找到一些我們所想要找的Control。
但是到了.net 2.0之後,我們用了MasterPage,
然後發現竟然找不到Control了,怎麼會這樣呢?
原因是因為,他的Control容器架構改變了,
所以造成過去我們很習慣使用的Me.FindControl Method,將會很容易找不到我們要的元件...
因為你可能對於Control容器的架構不清楚...

而為了減輕Coding上的負擔,所以我在我的專案中,提供了兩個Method來替代過去的FindControl Method


'''
''' 找Page內的Control
'''

'''
'''
'''
Protected Function FindPageControl(ByVal strID As String) As System.Web.UI.Control
If Me.Master Is Nothing Then
Return Nothing
End If
'固定寫死找ContentPlaceHolder1的Control
Dim objContent As System.Web.UI.Control = Me.FindMasterControl(CMConst.ContentPlaceHolder_ID)
If objContent Is Nothing Then
Return Nothing
End If
Return objContent.FindControl(strID)
End Function



'''
''' 找MasterPage內的Control
'''

'''
'''
'''
Protected Function FindMasterControl(ByVal strID As String) As System.Web.UI.Control
If Me.Master Is Nothing Then
Return Nothing
End If
Return Me.Master.FindControl(strID)
End Function


在FindPageControl中,我固定寫死了ContentPlaceHolder1,因為在我們的專案中,我們只會用到一個ContentPlaceHolder,所以我們這樣做,而你可能可以改寫他的ContentPlaceHolder的ID,或是也將該ID做為參數的傳入值也是可以的。

有了這兩個Method,我們將可以很輕鬆的找到我們要的Control了。

沒有留言:

張貼留言