using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using System.Web.UI;
using AjaxControlToolkit;
/// <summary>
/// 基頁面,實現多國語言處理等處理
/// </summary>
public abstract class BasePage : System.Web.UI.Page
{
private ArrayList arrPageList = new ArrayList();
//CultureInfo對象
protected System.Globalization.CultureInfo cultureInfo;
//ContentPlaceHolder控件
protected ContentPlaceHolder mpContentPlaceHolder;
//頁面ID
protected string pageId = "";
//語言設置(默認中文)
protected string language = "zh-CN";
//操作類型字符串
protected string operationTypeString = "";
#region 構造函數
/// <summary>
/// 構造函數
/// </summary>
public BasePage()
{
//根據類名取得畫面ID
pageId = this.GetType().Name.Replace("_aspx", "");
pageId = pageId.Substring(0, 1).ToUpper() + pageId.Substring(1);
}
#endregion
#region 畫面初始化前處理
/// <summary>
/// 畫面初始化前處理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Page_PreLoad(object sender, EventArgs e)
{
//設置CultureInfo信息
cultureInfo = new System.Globalization.CultureInfo(language);
System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfo;
System.Threading.Thread.CurrentThread.CurrentUICulture = cultureInfo;
//從資源文件取得畫面信息
string resourceValue = (string)base.GetLocalResourceObject("pageInfoResource");
//設置畫面Title
f_setPageTitle(resourceValue);
if (!IsPostBack)
{
//設定頁面控件,實現多語言和權限控制
f_SetControls(this.Page, "", "", pageId);
//刪除檢索標識
string clearSession = (string)Request["ClearSession"];
if (clearSession != null && clearSession.ToLower() == "yes")
{
// 關鍵字列表
ArrayList keys = new ArrayList();
int keycount = 0;
keycount = Session.Keys.Count;
for (int i = 0; i < keycount; i++)
{
keys.Add((string)Session.Keys[i]);
}
foreach (string key in keys)
{
// 保證SYSTEM_DATA不被刪除。
if (key == "SYSTEM_DATA")
{
continue;
}
// 刪除其餘的Session
Session.Remove(key);
}
}
}
}
#endregion
#region 畫面控件設置,包括多語言設置和權限設置
/// <summary>
/// 畫面控件設置,包括多語言設置和權限設置
/// </summary>
/// <param name="page">畫面</param>
/// <param name="globalMenuId">主菜單ID</param>
/// <param name="localMenuId">子菜單ID</param>
/// <param name="pageId">頁面ID</param>
public void f_SetControls(System.Web.UI.Page page, string globalMenuId, string localMenuId, string pageId)
{
//若當前畫面使用了MasterPage,則從MasterPage的ContentPlaceHolder取得個別頁面
if (page.Master != null)
{
//從資源文件取得畫面信息
string resourceValue = (string)base.GetLocalResourceObject("pageInfoResource");
//在MasterPage設置畫面信息
Label lbltitle = (Label)page.Master.FindControl("lbltitle");
lbltitle.Text = resourceValue;
//設置畫面Title
//f_setPageTitle(resourceValue);
//從MasterPage取得當前畫面
mpContentPlaceHolder = (ContentPlaceHolder)page.Master.FindControl("mainContent");
int count = mpContentPlaceHolder.Controls.Count;
for (int i = 0; i < count; i++)
{
//取得當前控件
Control currentCtrl = mpContentPlaceHolder.Controls[i];
//若當前控件爲Panel,做以下處理
if (currentCtrl.GetType().Name == "Panel")
{
//對Panel控件進行多語言處理
f_BindControl(currentCtrl);
//遍歷Panel控件的子控件
foreach (Control ctrl in currentCtrl.Controls)
{
//對取得的子控件進行多語言處理
f_BindControl(ctrl);
}
}
// 如果當前控件爲TabContainer,進行以下處理
else if (currentCtrl.GetType().Name == "TabContainer")
{
int tabPanel = currentCtrl.Controls.Count;
for (int j = 0; j < tabPanel; j++)
{
// 取得當前控件
Control currentTabCtr = currentCtrl.Controls[j];
// 如果當前控件爲TabPanel,進行以下處理
if (currentTabCtr.GetType().Name == "TabPanel")
{
// 對TabPanel控件進行多語言處理
f_BindControl(currentTabCtr);
Control contrlPanel = currentTabCtr.Controls[0];
foreach (Control ctrl in contrlPanel.Controls)
{
// 如果當前控件爲Panel,進行以下處理
if (ctrl.GetType().Name == "Panel")
{
foreach (Control subContrl in ctrl.Controls)
{
// 對取得的子控件進行多語言處理
f_BindControl(subContrl);
}
}
// 對取得的子控件進行多語言處理
f_BindControl(ctrl);
}
}
}
}
// 如果當前控件爲UpdatePanel,進行以下處理
else if (currentCtrl.GetType().Name == "UpdatePanel")
{
// 對Panel控件進行多語言處理
f_BindControl(currentCtrl);
// 遍歷Panel控件的子控件
foreach (Control ctrl in currentCtrl.Controls[0].Controls)
{
// 若當前控件爲Panel,做以下處理
if (ctrl.GetType().Name == "Panel")
{
// 對Panel控件進行多語言處理
f_BindControl(ctrl);
// 遍歷Panel控件的子控件
foreach (Control subCtrl in ctrl.Controls)
{
// 對取得的子控件進行多語言處理
f_BindControl(subCtrl);
}
}
// 對取得的子控件進行多語言處理
f_BindControl(ctrl);
}
}
// 如果當前控件爲MultiView,進行以下處理
else if (currentCtrl.GetType().Name == "MultiView")
{
// 遍歷MultiView控件的子控件
foreach (Control ct in currentCtrl.Controls)
{
foreach (Control ctrl in ct.Controls)
{
// 若當前控件爲Panel,做以下處理
if (ctrl.GetType().Name == "Panel")
{
// 對Panel控件進行多語言處理
f_BindControl(ctrl);
// 遍歷Panel控件的子控件
foreach (Control subCtrl in ctrl.Controls)
{
// 對取得的子控件進行多語言處理
f_BindControl(subCtrl);
}
}
// 對取得的子控件進行多語言處理
f_BindControl(ctrl);
}
f_BindControl(ct);
}
}
else
{
//對取得的當前控件進行多語言處理
f_BindControl(currentCtrl);
}
}
}
else
{
for (int i = 0; i < page.Controls.Count; i++)
{
//取得當前控件
foreach (Control currentCtrl in page.Controls[i].Controls)
{
//若當前控件爲Panel,進行以下處理
if (currentCtrl.GetType().Name == "Panel")
{
//對Panel控件處理
f_BindControl(currentCtrl);
//遍歷Panel上的控件
foreach (Control ctrl in currentCtrl.Controls)
{
//對取得的子控件處理
f_BindControl(ctrl);
}
}
else
{
//對取得的當前控件處理
f_BindControl(currentCtrl);
}
}
}
}
}
#endregion
#region 頁面顯示控件名與資源文件進行綁定
/// <summary>
/// 頁面顯示控件名與資源文件進行綁定
/// </summary>
/// <param name="ctrl">控件</param>
private void f_BindControl(Control ctrl)
{
//取得的控件做以下處理
if (!string.IsNullOrEmpty(ctrl.ID))
{
//取得頁面的控件的資源名
string resourceKey = ctrl.ID.ToString() + "Resource";
//通過資源名取得對應的值
string resourceValue = (string)base.GetLocalResourceObject(resourceKey);
//將取得的值設置到頁面控件
if (ctrl.GetType().Name == "Button")
{
//Button控件處理
((Button)ctrl).Text = resourceValue;
}
else if (ctrl.GetType().Name == "Label")
{
//Label控件處理
((Label)ctrl).Text = resourceValue;
}
else if (ctrl.GetType().Name == "HyperLink")
{
//HyperLink控件處理
((HyperLink)ctrl).Text = resourceValue;
}
else if (ctrl.GetType().Name == "LinkButton")
{
//LinkButton控件處理
((LinkButton)ctrl).Text = resourceValue;
}
else if (ctrl.GetType().Name == "Panel")
{
//Panel控件處理
((Panel)ctrl).GroupingText = resourceValue;
}
else if (ctrl.GetType().Name == "Literal")
{
//Literal控件處理
((Literal)ctrl).Text = resourceValue;
}
else if (ctrl.GetType().Name == "CheckBox")
{
//CheckBox控件處理
((CheckBox)ctrl).Text = resourceValue;
}
else if (ctrl.GetType().Name == "RadioButton")
{
//RadioButton控件處理
((RadioButton)ctrl).Text = resourceValue;
}
else if (ctrl.GetType().Name == "DropDownList")
{
//DropDownList控件處理
int index = 1;
//對DropDownList的ListItem進行多語言處理
foreach (ListItem listItem in ((DropDownList)ctrl).Items)
{
//TODO 控件命名待確定
resourceKey = ctrl.ID.ToString() + "ListItemResource" + index;
resourceValue = (string)base.GetLocalResourceObject(resourceKey);
listItem.Text = resourceValue;
index++;
}
}
else if (ctrl.GetType().Name == "RadioButtonList")
{
//RadioButtonList控件處理
int index = 1;
//對RadioButtonList的ListItem進行多語言處理
foreach (ListItem listItem in ((RadioButtonList)ctrl).Items)
{
//TODO 控件命名待確定
resourceKey = ctrl.ID.ToString() + "ListItemResource" + index;
resourceValue = (string)base.GetLocalResourceObject(resourceKey);
listItem.Text = resourceValue;
index++;
}
}
else if (ctrl.GetType().Name == "TabPanel")
{
//TabPanel控件處理
((TabPanel)ctrl).HeaderText = resourceValue;
}
else if (ctrl.GetType().Name == "GridView")
{
//遍歷GridView Templete's Colums
int intColums = ((GridView)ctrl).Columns.Count;
for (int j = 0; j < intColums; j++)
{
//對取得的子控件進行多語言處理
resourceKey = ((GridView)ctrl).Columns[j].HeaderText.ToString() + "Resource";
string resourceValue2 = (string)base.GetLocalResourceObject(resourceKey);
((GridView)ctrl).Columns[j].HeaderText = resourceValue2;
}
}
}
}
#endregion
#region 設置頁面的Title
/// <summary>
/// 設置頁面的Title
/// </summary>
/// <param name="title"></param>
public void f_setPageTitle(string pageInfo)
{
this.Page.Title = pageInfo;
}
#endregion
}