以下介紹 在 OnPreInit 中來覆寫某個 Session的值
最近有個系統,原本是在畫面上按下案件後,會將案件編號寫到Session["caseno"]之中,然後再切到Detail的程式。
因為Detail裡又有許多的Tab來呈現詳細資訊,每個Tab是一支aspx,都是讀取 Session["caseno"] 這個值來呈現!
但目前有個問題是,如果User開另一個IE出來,然後如果開另一個案件出來的話,使用者再點回原有的視窗。
這樣這個 Session["caseno"] 的值就會被改成最後的那個值,而導致顯示錯誤的案件資訊!
如果要解決這種狀況的話,目前想到是要帶QueryString到那些程式,並從原本讀取 Session["caseno"] 改成讀取 Request.QueryString["caseno"] 的方式。
如果程式有繼承一個底層的WebPage的話,則可以在 OnPreInit 中,判斷 Request.QueryString["caseno"] 的值,然後再寫到 Session["caseno"]之中,如下,
public class BaseWebPage : Page
{
private readonly string caseKey = "caseNo";
protected override void OnPreInit(EventArgs e)
{
var queryCaseNo = HttpContext.Current.Request.QueryString[caseKey];
HttpSessionState session = HttpContext.Current.Session;
var sessionCaseNo = (string)session[caseKey];
if (!string.IsNullOrWhiteSpace(queryCaseNo) && !string.IsNullOrWhiteSpace(sessionCaseNo))
{
if (sessionCaseNo != queryCaseNo)
{
session[caseKey] = queryCaseNo;
// reload other info
}
}
base.OnPreInit(e);
}
}
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^