對於需要重複使用的程式碼,我們通常可以寫在Asp.Net的Public Class類別中,再到WebForm中呼叫。例如在Test.aspx.cs的Page Load中使用此段程式碼來判斷使用者是否已登入。
protected void Page_Load(object sender, System.EventArgs e)
{
if (Server.HtmlEncode(Request.Cookies("UserInfo")("Login")) == true) {
Response.Redirect("Default.aspx");
} else {
Response.Redirect("Login.aspx");
}
}
我們需要在每一個頁面都先進行使用者是否登入的判斷,因此將此區段程式碼取出寫在Public Class類別中提供給每個頁面呼叫。
在Asp.Net中建立一個名為Class1.cs的類別,接著把上面的程式碼貼入Public Sub中會發現如下圖畫面中的錯誤:
在Class1.cs中出現Server、Request、Response皆未宣告的錯誤訊息。
因為Server、Request、Response的預設值是Page,即Page.Server、Page.Request、Page.Response。也就是說Page.Response的返回值是當前頁面的值,而在Class1.cs類別中無法得知當前頁面的值為何。
因此需要透過Http從來源頁面中傳遞告知當前頁面為何,我們在每個錯誤訊息前面加上HttpContext.Current屬性:
public void Get_Cookie()
{
if (HttpContext.Current.Server.HtmlEncode(HttpContext.Current.Request.Cookies("UserInfo")("Login")) == true) {
HttpContext.Current.Response.Redirect("Default.aspx");
} else {
HttpContext.Current.Response.Redirect("Login.aspx");
}
}
最後,將Test.aspx.cs的Page_Load改為呼叫的方式來使用Class1.cs類別
protected void Page_Load(object sender, System.EventArgs e)
{
Class1 Class1 = new Class1();
Class1.Get_Cookie();
}