2014-05-19 21 views
0

如果將唯一變量分配給每個單獨頁面,在這種情況下PageID如何從母版頁讀取頁面變量

PageID如何從加載時的母版頁引用?

PAGE VB

Partial Class Index 
    Inherits System.Web.UI.Page 

    Dim PageID As Integer = 1 
End Class 

MASTER VB

Partial Class MasterPage 
    Inherits System.Web.UI.MasterPage 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If PageID = 1 Then 
    ... 
    End If 
    End Sub 
End Class 

我知道這可以通過查詢字符串來實現,但是我正在尋找一個更有效,更安全的解決方案由於可能頁數。

回答

1

揭露一個返回領域的公共財產,那麼你就必須在MasterPage鑄就Page屬性的具體類型:

Dim index As Index = TryCast(Me.Page, Index) 
If index IsNot Nothing Then 
    Dim pageID As Int32 = index.PageID 
End If 

而在Index類:

Partial Class Index 
    Inherits System.Web.UI.Page 

    Private _PageID As Integer = 1 
    Public Property PageID As Int32 
     Get 
      Return _PageID 
     End Get 
     Set(value As Int32) 
      _PageID = value 
     End Set 
    End Property 

End Class 

既然你想在每個頁面中都需要定義一個接口。你可以讓他們實現了相同的Interface例如IPageable

Public Interface IPagable 
    Property PageID As Int32 
End Interface 

現在,讓我們所有的頁面實現它:

Partial Class Index 
    Inherits System.Web.UI.Page 
    Implements IPagable 

    Private _PageID As Integer = 1 
    Public Property PageID As Int32 Implements IPagable.PageID 
     Get 
      Return _PageID 
     End Get 
     Set(value As Int32) 
      _PageID = value 
     End Set 
    End Property 

End Class 

,並相應地更改母版:

Dim pageable As IPagable = TryCast(Me.Page, IPagable) 
If pageable IsNot Nothing Then 
    Dim pageID As Int32 = pageable.PageID 
End If 
+0

請問公共財產是在App_Code文件夾中聲明,然後在頁面上定義的值? – Obsidian

+0

@Obsidion:我不知道,我從來沒有使用網站。請注意,我編輯了我的答案,以包含使用接口的方法。 –

+0

這非常有幫助,謝謝你的簡潔的代碼。 – Obsidian

相關問題