在WEB應用中
我們經常要創建個性化的網頁
什麼是個性化的網頁呢?舉個例子
大家經常使用熟悉的搜索引擎google
當我們設置了每次要使用的個性化語言偏好
比如使用中文後
在下次使用google時
則google會出現中文界面的頁面
十分方便
在
中
我們可以使用profile功能
構造象上文提到的google那樣的個性化網頁
下面
我們舉個例子來說明
在該例子中
我們建立一個日歷
每次用戶可以選擇喜歡的語言(中文
英文)設置
當用戶選定了語言設置後
則下次用戶重新訪問該頁面時
則會出現對應語言顯示的頁面
首先
我們使用visual studio express beta
創建一個新的web站點
使用語言
接著往窗體添加如下控件
如下圖
其中分別添加如下控件
一個label標簽
一個日歷控件
一個dropdownlist控件
一個button控件
而對於dropdownlist控件的設置采用如下方式
·Text Value 目的
·English En
US 用英文顯示網頁
·Chinese Zh
CN 用中文顯示網頁
·Auto Select Auto 根據IE浏覽器中的語言設置自動選擇頁面顯示的語言
接下來
我們可以開始設置資源文件了
由於我們的這個應用是一個多語言顯示的頁面
所以要分別設置對應的英語
中文資源文件
在visual studio
中
選擇工具菜單中的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
這時會看到如下圖的資源文件
我們可以對其中的中文資源文件進行編輯
在
中
只需要簡單在頁面aspx頭部的@page頁增加兩個新的屬性
Culture
和
UICultrue
則WEB應用程序會自動在運行時
根據預先設定好的資源文件
自動顯示相應語言的頁面
如下面程序段所示
<%@ Page Language=
VB
Culture=
auto
UICulture=
auto
AutoEventWireup=
false
CompileWith=
Default
aspx
vb
ClassName=
Default_aspx
meta:resourcekey=
PageResource
%>
為了測試程序
打開IE浏覽器
將語言設置選定為中文
運行程序
則可以看到
程序自動調用了中文資源文件
顯示出來的頁面語言是中文
而不是默認的英文(因為我們默認的default
aspx是調用英文資源文件的)
如下圖
上面的程序中
我們只是利用了資源文件的特性而已
下面
我們將實現讓程序
記住
用戶每次選擇語言
就象google那樣
記住用戶每次的選擇後
下次用戶在浏覽頁面時
就會使用該語言的頁面了
首先
要實現這樣的功能
我們必須使用
中新提供的profile功能
Profile可以利用數據庫存儲關於用戶的個性化信息
有點象session對象
但session對象是有生存期的
在生存期後
session對象自動失效了
而profile不同
除非顯式移除它
要實現profile功能
必須先在nfig中進行定義
如下
<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 = Calendar
SelectedDate
在ngfig中
將會定義一些屬性/值
分別存貯將要保存的變量和值
比如lastmodified屬性
定義其值是datatime類型
如此類推
而<group>標簽
則是將一些相同或類似功能的變量值放在一起
在beta
中
profile是利用access數據庫來保存這些值的
我們為了要讓用戶每次在下拉框中選擇要用的語言
並將其保存起來
所以在提交按鈕中
寫入如下代碼
Sub btnSet_Click(ByVal sender As Object
_
ByVal e As System
EventArgs)
Profile
language = ddlLanguage
SelectedItem
Value
End Sub
而為了記錄用戶每次選擇日歷中的日期
我們則利用
dateselected屬性來記錄
並且用Profile
Info
LastModified記錄下用戶每次選擇日歷中日期時的時間
如下代碼
Sub Calendar
_SelectionChanged(ByVal sender As Object
_
ByVal e As System
EventArgs)
Profile
Info
DateSelected = Calendar
SelectedDate
Profile
Info
LastModified = Now
End Sub
當頁面加載時
我們可以取出預先保存在profile對象中的值
然後再在日歷控件中顯示上次用戶顯示的日期
以及用戶上次選擇日期時的時間
Sub Page_Load(ByVal sender As Object
_
ByVal e As System
EventArgs) Handles Me
Load
Calendar
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 =
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 =
Case
zh
CN
: ddlLanguage
SelectedIndex =
Case
auto
: ddlLanguage
SelectedIndex =
End Select
Else
if language is auto
then exit
ddlLanguage
SelectedIndex =
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形式調用)
程序運行後
當用戶選擇英文時
如下圖所示
當用戶選擇中文提交時
程序運行如下圖所示
當用戶選擇中文提交時
程序運行如下圖所示
From:http://tw.wingwit.com/Article/program/net/201311/12715.html