asp.net 2.0 建立個人化的網頁

來源:互聯網
上載者:User
發表時間:2005-9-21 11:47:01
文章來源:AspCool.Com
文章作者: 廖煜嶸編譯   
責任編輯:

     在WEB應用中,我們經常要建立個人化的網頁。什麼是個人化的網頁呢?舉個例子,大家經常使用熟悉的搜尋引擎google,當我們設定了每次要使用的個人化語言偏好,比如使用中文後,在下次使用google時,則google會出現中文介面的頁面,十分方便。在asp.net 2.0中,我們可以使用profile功能,構造象上文提到的google那樣的個人化網頁。下面,我們舉個例子來說明,在該例子中,我們建立一個日曆,每次使用者可以選擇喜歡的語言(中文,英文)設定,當使用者選定了語言設定後,則下次使用者重新訪問該頁面時,則會出現對應語言顯示的頁面。
  
    首先,我們使用visual studio express beta 1,建立一個新的web網站,使用vb.net語言,接著往表單添加如下控制項,如:
  
    其中分別添加如下控制項:一個label標籤,一個日曆控制項,一個dropdownlist控制項,一個button控制項,而對於dropdownlist控制項的設定採用如下方式:
  
    ·Text Value 目的
    ·English En-US 用英文顯示網頁
    ·Chinese Zh-CN 用中文顯示網頁
    ·Auto Select Auto 根據IE瀏覽器中的語言設定自動選擇頁面顯示的語言
  
    接下來,我們可以開始設定資源檔了。由於我們的這個應用是一個多語言顯示的頁面,所以要分別設定對應的英語,中文資源檔。在visual studio 2005中,選擇工具菜單中的Generate Local Resource(產生資源檔),如所示,
  
    當資源檔產生後,你會發現在解決方案管理器中,當前工程目錄下,有一個新的目錄檔案夾,叫localresources。其中,default.aspx.resx這個資源檔,是default.aspx這個首頁檔案要用到的資源檔(我們預設default.aspx是用英文顯示)。接下來,右鍵選定default.aspx.resx檔案,在彈出的菜單中,選擇複製,然後再在localresources目錄下,選擇粘貼,這樣,就會複製一個新的資源檔,將其改名為:default.aspx.zh-CN.resx,這個將作為我們要用到的中文資源檔。
  
    接下來,我們對資源檔進行編輯。比如開啟資源檔default.aspx.zh-CN.resx,這時會看到如的資源檔,我們可以對其中的中文資源檔進行編輯。
  
    在asp.net 2.0中,只需要簡單在頁面aspx頭部的@page頁增加兩個新的屬性"Culture"和"UICultrue", 則WEB應用程式會自動在運行時,根據預先設定好的資源檔,自動顯示相應語言的頁面,如下面程式段所示:
  
  <%@ Page Language="VB"
  Culture="auto" UICulture="auto"
  AutoEventWireup="false" CompileWith="Default.aspx.vb"
  ClassName="Default_aspx" meta:resourcekey="PageResource1" %>
  
    為了測試程式,開啟IE瀏覽器,將語言設定選定為中文,運行程式,則可以看到,程式自動調用了中文資源檔,顯示出來的頁面語言是中文,而不是預設的英文(因為我們預設的default.aspx是調用英文資源檔的),如:
  
    上面的程式中,我們只是利用了資源檔的特性而已,下面,我們將實現讓程式"記住"使用者每次選擇語言,就象google那樣,記住使用者每次的選擇後,下次使用者在瀏覽頁面時,就會使用該語言的頁面了。
  首先,要實現這樣的功能,我們必須使用asp.net 2.0中新提供的profile功能。Profile可以利用資料庫儲存關於使用者的個人化資訊,有點象session對象,但session對象是有生存期的,在生存期後,session對象自動失效了。而profile不同,除非顯式移除它。要實現profile功能,必須先在web.config中進行定義,如下:
  
  <system.web>
  <profile>
  <properties>
  <add name="language" type="string"/>
  <group name="Info">
  <add name="DateSelected"
  type="System.DateTime"/>
  <add name="LastModified"
  type="System.DateTime"/>
  </group>
  </properties>
  </profile>
  
    要使用profile屬性,可以這樣:
  
  Profile.language = "en-US"
  Profile.Info.LastModified = Now
  Profile.Info.DateSelected = Calendar1.SelectedDate
  
    在web.congfig中,將會定義一些屬性/值,分別存貯將要儲存的變數和值,比如lastmodified屬性,定義其值是datatime類型,如此類推。而<group>標籤,則是將一些相同或類似功能的變數值放在一起。在beta 1中,profile是利用access資料庫來儲存這些值的。
  
    我們為了要讓使用者每次在下拉框中選擇要用的語言,並將其儲存起來,所以在提交按鈕中,寫入如下代碼:
  
  Sub btnSet_Click(ByVal sender As Object, _
  ByVal e As System.EventArgs)
   Profile.language = ddlLanguage.SelectedItem.Value
  End Sub
  
    而為了記錄使用者每次選擇日曆中的日期,我們則利用profile.info.dateselected屬性來記錄,並且用Profile.Info.LastModified記錄下使用者每次選擇日曆中日期時的時間,如下代碼:
  
  Sub Calendar1_SelectionChanged(ByVal sender As Object, _
  ByVal e As System.EventArgs)
   Profile.Info.DateSelected = Calendar1.SelectedDate
   Profile.Info.LastModified = Now
  End Sub
  
    當頁面載入時,我們可以取出預先儲存在profile對象中的值,然後再在日曆控制項中顯示上次使用者顯示的日期,以及使用者上次選擇日期時的時間。
  
  Sub Page_Load(ByVal sender As Object, _
  ByVal e As System.EventArgs) Handles Me.Load
  Calendar1.SelectedDate = Profile.Info.DateSelected
   Response.Write("Date set on " Profile.Info.LastModified)
  End Sub
  
    而為了在每次頁面載入時,能根據之前使用者儲存在profile對象中的語言正確顯示網頁,必須在page_preinit()事件中寫入如下代碼:
  
  Dim lang As System.Globalization.CultureInfo
  
  '讀取使用者在下拉框中選取的語言值
  Dim selectedLang As String = Request("ddlLanguage")
  
  '如果使用者選擇auto,則在下拉框中顯示AUTO的選擇項
  If selectedLang = "Auto" Then
   ddlLanguage.SelectedIndex = 2
   Exit Sub
  End If
  
  ' 如果是POSTBACK,則讀取原來已經儲存的語言資訊
  If selectedLang IsNot Nothing Then
   lang = New System.Globalization.CultureInfo(selectedLang)
  Else
  '如果是第一次調用頁面
  If Profile.language <> "Auto" Then
   lang = New System.Globalization.CultureInfo(Profile.language)
   Select Case Profile.language
    Case "en-US" : ddlLanguage.SelectedIndex = 0
    Case "zh-CN" : ddlLanguage.SelectedIndex = 1
    Case "auto" : ddlLanguage.SelectedIndex = 2
   End Select
  Else
   '---if language is auto, then exit
   ddlLanguage.SelectedIndex = 2
   Exit Sub
  End If
  End If
  
  System.Threading.Thread.CurrentThread.CurrentCulture = lang
  System.Threading.Thread.CurrentThread.CurrentUICulture = lang
  
  lblWelcomeMessage.Text = Resources.Resource.WelcomeMsg.ToString
  Page.Title = Resources.Resource.PageTitle.ToString
  lblSelectLanguage.Text = Resources.Resource.SelectLanguage.ToString
  
    下面來解釋一下代碼。首先,聲明一個cultureinfo類型的變數,這個變數將儲存使用者每次選擇語言後的資訊。
  
    接下來,首先檢查頁面是否postback了,如果postback了(發生在頁面重新整理或者點擊了控制項,激發頁面事件後,這時使用者可能重新選擇一種語言了),則用下拉框中使用者選擇的語言去初始化cultureinfo
  
  lang = New System.Globalization.CultureInfo(selectedLang)
  
    而如果頁面是第一次調用,則讀取原來profile對象中的語言資訊,並根據其是什麼語言,自動化佈建好下拉框中的對應顯示(使用case語句)。
  
    最後,我們設定系統的當然線程的本地化語言為設定好的lang,並設定各個控制項的值為資源檔中的值(以resources.resource.xxxx形式調用)。程式運行後,當使用者選擇英文時,如所示:
  
    當使用者選擇中文提交時,程式運行如所示:
  
    而實際上,asp.net 2.0之所以能實現上面的功能,實際上是利用在工程下data目錄下的一個叫aspnetdb的ACCESS資料庫來記錄的,開啟其中的aspnet_profile表,就會發現其中記錄著使用者每次提交的資訊。
  
    總結:
  
    在本文中,介紹了利用asp.net 2.0的profile功能,如何去實現本地語言個人化網頁應用。Profile功能利用了資料庫,記錄使用者每次提交的本地語言化資訊,可以輕鬆進行讀取,從而實現個人化網頁。我們期待在visual studio 2005正式版中,profile功能能進一步加強。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.