频道直达 - 学院 - 下载 - 交易 - 特效 - 字库 - 手册 -排名-工具- 繁體
网页教学网站开发 设为首页
加入收藏
联系我们
建站搜索: 常用广告代码   用户注册 | 用户登陆
您当前的位置:中国建站之家 -> 网站开发设计技术教程 -> asp教程 -> Portal Starter 源码深入剖析(一)

Portal Starter 源码深入剖析(一)

作者:未知  来源:转载  发布时间:2005-7-26 9:05:47  发布人:acx

减小字体 增大字体

Portal Starter 源码深入剖析(一)
学ASP.net光看书看来是不行的,找一些经典的源代码来读读,对提升认识是很有帮助的。
在Microsoft的网站上找到几个范例,选择Portal是因为这个范例最大,可作为一个简单的门户站。
Portal的工作流程:
1、读取网站设置文件PortalCfg.xml至context中缓存起来,这个过程由Global.asax中的Application_BeginRequest()事件来完成的。
2、客户访问Portal站,执行Default.aspx,Default.aspx判断客户端是Mobile还是浏览器,如果是后者,引导客户至DesktopDefault.aspx
3、DesktopDefault.aspx完成网站各个栏目的展示以及各个栏目中相应模块的加载。
分析Global.asax中的Application_BeginRequest()事件:

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
''默认访问主页
Dim tabIndex As Integer = 0
Dim tabId As Integer = 1

'' Get TabIndex from querystring
If Not (Request.Params("tabindex") Is Nothing) Then
tabIndex = CInt(Request.Params("tabindex"))
End If

'' Get TabID from querystring
If Not (Request.Params("tabid") Is Nothing) Then
tabId = CInt(Request.Params("tabid"))
End If

'' Add the PortalSettings object to the context
'' PortalSetting在Components\Configuration.vb中定义,其作用是根据传入的tabIndex,tabId加载相应栏目的元素。
'' Context用来缓存相应栏目的设置。
Context.Items.Add("PortalSettings", New PortalSettings(tabIndex, tabId))

'' Read the configuration info from the XML file or retrieve from Cache
'' and add to the context
'' Configuration类在Components\Configuration中定义,其作用是操作Portal网站的设置文件PortalCfg.xml文件。
'' 同样是将设置文件缓存到Context中,这样网站的任何部分都可以访问到这些设置。
Dim config As Configuration = New Configuration()
Context.Items.Add("SiteSettings", config.GetSiteSettings())

Try
If Not (Request.UserLanguages Is Nothing) Then
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages(0))
'' Default to English if there are no user languages
Else
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-us")
End If
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
Catch ex As Exception
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-us")
End Try
End Sub
分析New PortalSettings(tabIndex, tabId),请看下面PortalSettings的构造函数:
Public Class PortalSettings
Public PortalId As Integer
Public PortalName As String
Public AlwaysShowEditButton As Boolean
Public DesktopTabs As New ArrayList()
Public MobileTabs As New ArrayList()
Public ActiveTab As New TabSettings()
......

Public Sub New(ByVal tabIndex As Integer, ByVal tabId As Integer)

'' Get the configuration data
Dim config As Configuration = New Configuration()
'' 通过Configuration类中的GetSiteSettings()将PortalCfg.xml文件导入到Context中,
'' 随后通过返回值赋值给siteSettings,siteSettings被定义为一个增强型的Dataset类。
Dim siteSettings As SiteConfiguration = config.GetSiteSettings()


'' Read the Desktop Tab Information, and sort by Tab Order
'' 读取Tab信息,也就是Portal网站的栏目信息,放到DesktopTabs中。
Dim tRow As SiteConfiguration.TabRow
For Each tRow In siteSettings.Tab.Select("", "TabOrder")
Dim tabDetails As New TabStripDetails()

With tabDetails
.TabId = tRow.TabId
.TabName = tRow.TabName
.TabOrder = tRow.TabOrder
.AuthorizedRoles = tRow.AccessRoles
End With

Me.DesktopTabs.Add(tabDetails)
Next

'' If the PortalSettings.ActiveTab property is set to 0, change it to
'' the TabID of the first tab in the DesktopTabs collection
If Me.ActiveTab.TabId = 0 Then
Me.ActiveTab.TabId = CType(Me.DesktopTabs(0), TabStripDetails).TabId
End If


'' Read the Mobile Tab Information, and sort by Tab Order
Dim mRow As SiteConfiguration.TabRow
For Each mRow In siteSettings.Tab.Select("ShowMobile=''true''", "TabOrder")
Dim tabDetails As New TabStripDetails()

With tabdetails
.TabId = mRow.TabId
.TabName = mRow.MobileTabName
.AuthorizedRoles = mRow.AccessRoles
End With

Me.MobileTabs.Add(tabDetails)
Next

'' Read the Module Information for the current (Active) tab
'' 找到当前栏目,读取当前栏目中的模块信息。
Dim activeTab As SiteConfiguration.TabRow = siteSettings.Tab.FindByTabId(tabId)
Dim moduleRow As SiteConfiguration._ModuleRow

'' Get Modules for this Tab based on the Data Relation
For Each moduleRow In activeTab.GetModuleRows()
Dim moduleSettings As New moduleSettings()

With moduleSettings

.ModuleTitle = moduleRow.ModuleTitle
.ModuleId = moduleRow.ModuleId
.ModuleDefId = moduleRow.ModuleDefId
.ModuleOrder = moduleRow.ModuleOrder
.TabId = tabId
.PaneName = moduleRow.PaneName
.AuthorizedEditRoles = moduleRow.EditRoles
.CacheTime = moduleRow.CacheTimeout
.ShowMobile = moduleRow.ShowMobile

'' ModuleDefinition data
'' 按模块ID找到该模块用户组件的路径。
Dim modDefRow As SiteConfiguration.ModuleDefinitionRow = siteSettings.ModuleDefinition.FindByModuleDefId(.ModuleDefId)

.DesktopSrc = modDefRow.DesktopSourceFile
.MobileSrc = modDefRow.MobileSourceFile
End With

Me.ActiveTab.Modules.Add(moduleSettings)
Next

'' Sort the modules in order of ModuleOrder
Me.ActiveTab.Modules.Sort()

'' Get the first row in the Global table
Dim globalSettings As SiteConfiguration.GlobalRow = siteSettings.Global.Rows(0)

'' Read Portal global settings
Me.PortalId = globalSettings.PortalId
Me.PortalName = globalSettings.PortalName
Me.AlwaysShowEditButton = globalSettings.AlwaysShowEditButton
Me.ActiveTab.TabIndex = tabIndex
Me.ActiveTab.TabId = tabId
Me.ActiveTab.TabOrder = activeTab.TabOrder
Me.ActiveTab.MobileTabName = activeTab.MobileTabName
Me.ActiveTab.AuthorizedRoles = activeTab.AccessRoles
Me.ActiveTab.TabName = activeTab.TabName
Me.ActiveTab.ShowMobile = activeTab.ShowMobile

End Sub
分析Configuration类中的GetSiteSettings()方法:
Public Function GetSiteSettings() As SiteConfiguration
Dim siteSettings As SiteConfiguration = CType(HttpContext.Current.Cache("SiteSettings"), SiteConfiguration)

'' If the SiteConfiguration isn''t cached, load it from the XML file and add it into the cache.
If siteSettings Is Nothing Then

'' Create the dataset
siteSettings = New SiteConfiguration()

'' Retrieve the location of the XML configuration file
Dim configFile As String = HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings("configFile"))

With siteSettings
'' Set the AutoIncrement property to true for easier adding of rows
.Tab.TabIdColumn.AutoIncrement = True
._Module.ModuleIdColumn.AutoIncrement = True
.ModuleDefinition.ModuleDefIdColumn.AutoIncrement = True

'' Load the XML data into the DataSet
siteSettings.ReadXml(configFile)
End With

'' Store the dataset in the cache
'' 基于PortalCfg.xml文件的Cache,当PortalCfg.xml文件有变动时,重新读入该文件。
HttpContext.Current.Cache.Insert("SiteSettings", siteSettings, New CacheDependency(configFile))

End If

Return siteSettings

End Function



将本文收藏到QQ书签与更多好友分享
[打 印]
[] [返回上一页] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
精彩推荐
热门文章
· 注册码大全二
· 注册码大全四
· 注册码大全一
· 要10G免费网络硬盘的请进..
· 通过google 赶快来赚美金..
· 注册码大全十
· 头像-qq头像(qq新头像)4..
· 让你轻松架设FTP服务器1..
· 注册码大全三
· 梦幻背景图片7
· 卡通动物图片6
· 网页制作素材-按钮素材2..
· 让你轻松架设FTP服务器5..
· 风景图片8
· 注册码大全九
· 让你轻松架设FTP服务器2..
关注此文读者还看过
· Flash MX Pro 2004新模板..
· 编写“公平”的ASP图形计..
· 精美汽车图片13
· 充分利用 .NET 框架的 P..
· 利 用 ISAPI 实 现 向 数..
· DW MX 2004的Flash动画元..
· 用Fireworks打造漂亮流光..
· 音乐网站的“曙光” 版权..
· 98下安装JSP环境的俩常见..
· 身份证号码验证函数
· WSH 直接将查询数据结果..
· 韩星家族 免费50MB空间+..
· 金山获7200万美元联合投..
· IIS体系架构
· MySpace是对中国互联网企..
· .net命名规范的不同之处..
相关文章
· SEO如何分析一个网站?
· SEO如何来分析一个网站
· 分析一下网站赚不到钱的四大..
· 使用report builder构..
· Flash的档案的输出(Export)..
· 《简单实现Crystal Report动..
· ASP.NET Server Control De..
· 网上追捕(很多实用的port)
· ASP.NET中利用Crystal Repo..
· ASP Call Crystal Report w..
· ASP Call Crystal Report w..
· ASP Call Crystal Report w..
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 人才招聘
网站合作、内容监督、商务咨询:QQ: 9576619
Copyright ? 2005--2008 中国建站之家版权所有
粤ICP备05092265号