2010-11-04 20 views
8

Kullanıcı sayfamdaki ana sayfasından bir özelliğe erişmeye çalışıyorum. İşte benim kullanıcı kontrol codebehind başlangıcıdırErişim Üst Sayfa Özelliği Kullanıcının Kümesinden

Partial Class _Default 
    Inherits System.Web.UI.Page 

    Private _selectedID As String = "74251BK3232" 

    Public Property SelectedID() As String 
      Get 
       Return _selectedID 
      End Get 
      Set(ByVal value As String) 
       _selectedID = value 
      End Set 
    End Property 

: Burada

benim default.asp codebehind başlangıcıdır

Partial Class ctrlAddAttribute 
    Inherits System.Web.UI.UserControl 
    Dim selectedID As String = Me.Parent.Page.selectedID() 

Şu hatayı alıyorum "selectedID üyesi değildir System.Web.UI.Page"

adivse edin! Eğer _Default denilen gerçek implementaion için Sayfa döküm zaman

cevap

9

Sen mülkü erişebilir.

Dim selectedID As String = DirectCast(Me.Page,_Default).selectedID() 

Ancak, bu bir Usercontrol (yeniden kullanılabilirlik) amacı değil. Normalde ID'yi Denetleyici'den (sayfa) UserControl'e verirsiniz.

Yani UserControl bir özellik tanımlamak ve sayfadan ayarlayın. Bu sayede UserControl hala diğer sayfalarda çalışır.

+1

Teşekkür Tim, Tavsiyene aldı. Kontrolüm için bir kamu mülkünü ekledim ve bunu dinamik olarak eklediğimde sayfasından ayarladım! – s15199d

1

kullanıcı kontrol sayfasına ait değil ya açıkça dahil sayfadan usercontrol bir özelliği ayarlamak veya bir özyinelemeli fonksiyon oluşturmak sürece, doğrudan erişemez o tüm üst nesnelerinin aracılığıyla döngüleri System.Web.UI.Page türünde bir nesne bulana kadar. İlk İçin

, bir özelliği kullanabilirsiniz kullanıcı kontrolünde (I adlı bir özellik ParentForm kullanarak yaptık): "Ana" sayfasında

Private _parentForm as System.Web.UI.Page 
Public Property ParentForm() As System.Web.UI.Page ' or the type of your page baseclass 
    Get 
     Return _parentForm 
    End Get 
    Set 
     _parentForm = value 
    End Set 
End Property 

, sen bu özelliği ayarlamak istiyorum mümkün olduğunca erken bir olay. PreLoad'u kullanmayı tercih ediyorum çünkü yükten önce geliyor (böylece diğer kontrollerin çoğuna ihtiyaç duyulduğunda kullanılabilir) ve init'ten sonra.

Protected Sub Page_PreLoad(ByVal sender as Object, ByVal e as EventArgs) Handles Me.PreLoad 
    Me.myUserControlID.ParentForm = Me 
End Sub 

Ayrıca, sayfayı bulmak için üst denetimler arasında bir işlev trolü yazabilirsiniz. Aşağıdaki kodlar test edilmemiştir, bu yüzden ince ayar gerektirebilir, ancak fikir doğrudur.

Public Shared Function FindParentPage(ByRef ctrl As Object) As Page 
    If "System.Web.UI.Page".Equals(ctrl.GetType().FullName, StringComparison.OrdinalIgnoreCase) Then 
     Return ctrl 
    Else 
     Return FindParentPage(ctrl.Parent) 
    End If 
End Function 

DÜZENLEME: Bu tip System.Web.UI.Page içinde var olmadığı için doğrudan da bu özelliği erişemez. @Tim SCHMELTER önerir olarak, belirli Sayfa türüne _Default sayfayı yayınlama denemenizde verebilir veya bu bu sayfaların çoğuna ortak bir şeyse, bir temel sayfa sınıf oluşturmak gerekiyor ve bu sınıfta mülkünüzü içerebilir. Sonra sayfasında Sonra yerine

Public Class MyBasePage 
    Inherits System.Web.UI.Page 

    Public Property SelectedID() as Integer 
     ... 
    End Property 
End Class 

System.Web.UI.Page

bu sınıfı devralabilir:

Partial Class _Default 
    Inherits MyBasePage 

    ... 

End Class 
İlgili konular