熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET 2.0中構造個性化網頁

2013-11-13 10:09:13  來源: .NET編程 

  在WEB應用中我們經常要創建個性化的網頁什麼是個性化的網頁呢?舉個例子大家經常使用熟悉的搜索引擎google當我們設置了每次要使用的個性化語言偏好比如使用中文後在下次使用google時則google會出現中文界面的頁面十分方便我們可以使用profile功能構造象上文提到的google那樣的個性化網頁下面我們舉個例子來說明在該例子中我們建立一個日歷每次用戶可以選擇喜歡的語言(中文英文)設置當用戶選定了語言設置後則下次用戶重新訪問該頁面時則會出現對應語言顯示的頁面
  
  首先我們使用visual studio express beta 創建一個新的web站點使用語言接著往窗體添加如下控件如下圖
   
  其中分別添加如下控件一個label標簽一個日歷控件一個dropdownlist控件一個button控件而對於dropdownlist控件的設置采用如下方式
  
  ·Text Value 目的
  ·English EnUS 用英文顯示網頁
  ·Chinese ZhCN 用中文顯示網頁
  ·Auto Select Auto 根據IE浏覽器中的語言設置自動選擇頁面顯示的語言
  
  接下來我們可以開始設置資源文件了由於我們的這個應用是一個多語言顯示的頁面所以要分別設置對應的英語中文資源文件在visual studio 選擇工具菜單中的Generate Local Resource(產生資源文件)如下圖所示
   
  當資源文件產生後你會發現在解決方案管理器中當前工程目錄下有一個新的目錄文件夾叫localresources其中defaultaspxresx這個資源文件是defaultaspx這個首頁文件要用到的資源文件(我們默認defaultaspx是用英文顯示)接下來右鍵選定defaultaspxresx文件在彈出的菜單中選擇復制然後再在localresources目錄下選擇粘貼這樣就會復制一個新的資源文件將其改名為defaultaspxzhCNresx這個將作為我們要用到的中文資源文件
  
  接下來我們對資源文件進行編輯比如打開資源文件defaultaspxzhCNresx這時會看到如下圖的資源文件我們可以對其中的中文資源文件進行編輯
  
  在 只需要簡單在頁面aspx頭部的@page頁增加兩個新的屬性CultureUICultrue 則WEB應用程序會自動在運行時根據預先設定好的資源文件自動顯示相應語言的頁面如下面程序段所示
  
  <%@ Page Language=VB
  Culture=auto UICulture=auto
  AutoEventWireup=false CompileWith=Defaultaspxvb
  ClassName=Default_aspx meta:resourcekey=PageResource %>
  
  為了測試程序打開IE浏覽器將語言設置選定為中文運行程序則可以看到程序自動調用了中文資源文件顯示出來的頁面語言是中文而不是默認的英文(因為我們默認的defaultaspx是調用英文資源文件的)如下圖
   
  上面的程序中我們只是利用了資源文件的特性而已下面我們將實現讓程序記住用戶每次選擇語言就象google那樣記住用戶每次的選擇後下次用戶在浏覽頁面時就會使用該語言的頁面了
  
  首先要實現這樣的功能我們必須使用 中新提供的profile功能Profile可以利用數據庫存儲關於用戶的個性化信息有點象session對象但session對象是有生存期的在生存期後session對象自動失效了而profile不同除非顯式移除它要實現profile功能必須先在nfig中進行定義如下
  
  <systemweb>
  <profile>
  <properties>
  <add name=language type=string/>
  <group name=Info
  <add name=DateSelected
  type=SystemDateTime/>
  <add name=LastModified
  type=SystemDateTime/>
  </group>
  </properties>
  </profile>
  
  要使用profile屬性可以這樣
  
  Profilelanguage = enUS
  ProfileInfoLastModified = Now
  ProfileInfoDateSelected = CalendarSelectedDate
  
  在ngfig中將會定義一些屬性/值分別存貯將要保存的變量和值比如lastmodified屬性定義其值是datatime類型如此類推而<group>標簽則是將一些相同或類似功能的變量值放在一起在beta profile是利用access數據庫來保存這些值的
  
  我們為了要讓用戶每次在下拉框中選擇要用的語言並將其保存起來所以在提交按鈕中寫入如下代碼
  
  Sub btnSet_Click(ByVal sender As Object _
  ByVal e As SystemEventArgs)
  Profilelanguage = ddlLanguageSelectedItemValue
  End Sub
  
  而為了記錄用戶每次選擇日歷中的日期我們則利用dateselected屬性來記錄並且用ProfileInfoLastModified記錄下用戶每次選擇日歷中日期時的時間如下代碼
  
  Sub Calendar_SelectionChanged(ByVal sender As Object _
  ByVal e As SystemEventArgs)
  ProfileInfoDateSelected = CalendarSelectedDate
  ProfileInfoLastModified = Now
  End Sub
  
  當頁面加載時我們可以取出預先保存在profile對象中的值然後再在日歷控件中顯示上次用戶顯示的日期以及用戶上次選擇日期時的時間
  
  Sub Page_Load(ByVal sender As Object _
  ByVal e As SystemEventArgs) Handles MeLoad
  CalendarSelectedDate = ProfileInfoDateSelected
  ResponseWrite(Date set on ProfileInfoLastModified)
  End Sub
  
  而為了在每次頁面加載時能根據之前用戶保存在profile對象中的語言正確顯示網頁必須在page_preinit()事件中寫入如下代碼
  
  Dim lang As SystemGlobalizationCultureInfo
  
  讀取用戶在下拉框中選取的語言值
  Dim selectedLang As String = Request(ddlLanguage)
  
  如果用戶選擇auto則在下拉框中顯示AUTO的選擇項
  If selectedLang = Auto Then
  ddlLanguageSelectedIndex =
  Exit Sub
  End If
  
   如果是POSTBACK則讀取原來已經保存的語言信息
  If selectedLang IsNot Nothing Then
  lang = New SystemGlobalizationCultureInfo(selectedLang)
  Else
  如果是第一次調用頁面
  If Profilelanguage <> Auto Then
  lang = New SystemGlobalizationCultureInfo(Profilelanguage)
  Select Case Profilelanguage
  Case enUS : ddlLanguageSelectedIndex =
  Case zhCN : ddlLanguageSelectedIndex =
  Case auto : ddlLanguageSelectedIndex =
  End Select
  Else
  if language is auto then exit
  ddlLanguageSelectedIndex =
  Exit Sub
  End If
  End If
  
  SystemThreadingThreadCurrentThreadCurrentCulture = lang
  SystemThreadingThreadCurrentThreadCurrentUICulture = lang
  
  lblWelcomeMessageText = ResourcesResourceWelcomeMsgToString
  PageTitle = ResourcesResourcePageTitleToString
  lblSelectLanguageText = ResourcesResourceSelectLanguageToString
  
  下面來解釋一下代碼首先聲明一個cultureinfo類型的變量這個變量將保存用戶每次選擇語言後的信息
  
  接下來首先檢查頁面是否postback了如果postback了(發生在頁面刷新或者點擊了控件激發頁面事件後這時用戶可能重新選擇一種語言了)則用下拉框中用戶選擇的語言去初始化cultureinfo
  
  lang = New SystemGlobalizationCultureInfo(selectedLang)
  
  而如果頁面是第一次調用則讀取原來profile對象中的語言信息並根據其是什麼語言自動設置好下拉框中的對應顯示(使用case語句)
  
  最後我們設置系統的當然線程的本地化語言為設定好的lang並設置各個控件的值為資源文件中的值(以resourcesresourcexxxx形式調用)程序運行後當用戶選擇英文時如下圖所示
   
  當用戶選擇中文提交時程序運行如下圖所示
  
  當用戶選擇中文提交時程序運行如下圖所示
From:http://tw.wingwit.com/Article/program/net/201311/12715.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.