我有一个基本母版页,用于指定网站的主要布局模板。它还处理一些逻辑,根据部分更改选项卡,还设置页面元信息。
我通过查看查询字符串,从数据库加载记录以及根据该记录中找到的值动态设置嵌套母版页来动态加载嵌套母版页。我需要为布局和功能差异加载动态嵌套母版页。
我希望在基本母版页和动态加载的母版页中使用该记录中的其他信息,以便我可以避免其他数据库调用。
目前,我已经建立了一个继承MasterPage的类,作为基本母版页的基类。我有一个共享(静态)属性,它保存表示我想在基本母版页和嵌套的动态调用母版页之间共享的数据库调用的对象。
它有效,但看起来有点难看。还有其他更好的解决方案吗?
答案 0 :(得分:0)
您始终可以在HttpContext.Items集合中传递记录。一旦它在Items集合中,它就可用于在请求期间可以到达HttpContext的每个东西。
答案 1 :(得分:0)
好的,我不得不在这一点睡觉,但我想出了一个更清洁的解决方案。我最终使用了页面的基类,而不是母版页的基类。基页设置我将在基本母版页中设置的元数据。
Public Class PageBase
Inherits Page
Private _DocDetails As FolderDocument
Public Overridable ReadOnly Property DocDetails() As FolderDocument
Get
Return _DocDetails
End Get
End Property
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack() Then
SetMeta()
End If
End Sub
Protected Sub SetMeta()
If DocDetails IsNot Nothing Then
Page.Title = DocDetails.MetaTitle
If DocDetails.MetaKeywords <> String.Empty Then
Dim metaKeywords As New HtmlMeta()
metaKeywords.Name = "Keywords"
metaKeywords.Content = DocDetails.MetaKeywords
Page.Header.Controls.Add(metaKeywords)
End If
If DocDetails.MetaDescription <> String.Empty Then
Dim metaDescription As New HtmlMeta()
metaDescription.Name = "Description"
metaDescription.Content = DocDetails.MetaDescription
Page.Header.Controls.Add(metaDescription)
End If
End If
End Sub
End Class
..然后aspx页面继承此基页并动态设置母版页。
<%@ Page Language="VB" Inherits="PageBase" %>
<script runat="server">
Private _DocDetails As FolderDocument
Public Overrides ReadOnly Property DocDetails() As FolderDocument
Get
Return _DocDetails
End Get
End Property
Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs)
_DocDetails = FolderDocuments.GetFolderDocument()
If _DocDetails IsNot Nothing Then
If _DocDetails.MasterPage <> "" Then
Me.MasterPageFile = String.Format("~/templates/{0}.master", _DocDetails.MasterPage)
End If
End If
End Sub
</script>
...在动态调用的母版页中,我可以通过强制转换来引用页面的基类:
Dim parentPage As PageBase = DirectCast(Page, PageBase)
Response.write(parentPage.DocDetails.Title)