目的
實現用MasterPage中的
寫這篇文章的動機
PageBase
MasterPage
用MasterPage技術
簡單的做個解釋吧
登錄系統之後
此時用戶手動修改url地址欄中參數為
被視為非法操作
第一次代碼迭代
傳統的Page做法為
public class PageBase : System
{
public PageBase()
{
}
/**//// <summary>
/// 入口方法
/// </summary>
protected void Initialize()
{
// 插入通用業務邏輯
}
}
Web頁面
public partial class TestPage : PageBase
{
// 傳統的調用PageBase的方法
/**///// <summary>
/// 重寫基類OnPreInit() 方法
/// </summary>
/// <param name=
protected override void OnInit(eventargs e)
{
base
}
}
參照其做法
MasterPage
public partial class MyMasterPage : System
{
protected void Page_Load(object sender
{
if (!IsPostBack)
{
// 調用驗證方法
Initialize();
}
}
}
將Web頁面中的代碼修改為
public partial class TestPage : System
{
// 仿照PageBase方法
/**//// <summary>
/// 重寫基類OnPreInit() 方法
/// </summary>
/// <param name=
protected override void OnInit(eventargs e)
{
// 獲得母板頁引用
MyMasterPage myMasterPage = (MyMasterPage)this
// 調用母板頁中通用驗證方法
if (!IsPostBack)
{
myMasterPage
}
}
}將MasterPage中的Initialize()方法替換為實例中的
步驟
頁面顯示 歡迎 zhangsan 登錄
url地址顯示
步驟
頁面不會顯示 歡迎lisi登錄
反思
為了消除這些懷味道
第二次代碼迭代
修改MasterPage
public partial class MyMasterPage : System
{
protected void Page_Load(object sender
{
if (!IsPostBack)
{
// 調用驗證方法
CheckLogin();
}
}
/**//// <summary>
/// 驗證訪問是否合法
/// </summary>
private void CheckLogin()
{
// 假如 url中的編號 或 cookie中的編號
if (string
string
{
Response
}// 假如url中的編號 和 cookie中的編號 不匹配
else if (int
{
Response
}
}
}重構之後
步驟一
依然顯示用戶登錄頁面
測試失敗
用斷點跟蹤代碼
if (string
string
{
Response
}
由於登錄頁繼續自MasterPage
在PageBase技術中
第三次迭代
引入配置文件
<?XML version=
<pages>
<testpage>
<page title=
<page title=
</testpage>
<adminpages>
<page title=
<page title=
</adminpages>
</pages>
從中可以看到
創建Xml數據訪問類
public class XmlDAL
{
private static string filePath = string
static XmlDAL()
{
// 初始化配置文件路徑
filePath = HttpContext
}
/**//// <summary>
/// 獲得需要驗證的頁面列表
/// </summary>
/// <returns>需要驗證的頁面列表</returns>
public static IList<string> GetValidatePages()
{
IList<string> pages = new List<string>();
// 假如指定配置文件存在
if (System
{
try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc
// 獲取配置文件根節點
XmlNode root = xmlDoc
string XPath =
XmlNodeList nodeList = root
// 便利節點集合
foreach (XmlNode node in nodeList)
{
pages
}
}
catch (Exception ex)
{
throw new Exception(ex
}
}
return pages;
}
}
重構MasterPage
public partial class MyMasterPage : System
{
protected void Page_Load(object sender
{
if (!IsPostBack)
{
// 調用驗證方法
CheckLogin();
}
}
/**//// <summary>
/// 驗證訪問是否合法
/// </summary>
private void CheckLogin()
{
// 判定當前訪問頁面是否需要進行驗證
if (IsValidateNeeded(Request
{
// 假如 url中的編號 或 cookie中的編號
if (string
string
{
Response
}// 假如url中的編號 和 cookie中的編號 不匹配
else if (int
{
Response
}
}
}
/**//// <summary>
/// 驗證當前頁是否需要驗證
/// </summary>
/// <param name=
/// <returns>是否需要驗證狀態</returns>
private bool IsValidateNeeded(string url)
{
bool isNeeded = false;
// GetValidatePages() 方法返回需要驗證頁面列表
IList<string> pages = XmlDAL
IEnumerator<string> ie = pages
while (ie
{
// 假如當前頁面需要進行驗證
if (url
// 返回需要驗證狀態
return isNeeded = true;
}
return isNeeded;
}
}
進行測試
步驟
頁面顯示 歡迎 zhangsan 登錄
url地址顯示
步驟
頁面不會顯示 歡迎lisi登錄
From:http://tw.wingwit.com/Article/program/net/201311/12539.html