2013年9月4日 星期三

[轉貼] 使用HttpContext.Current 來解決Class類別中的Response、Server、Request未宣告問題


對於需要重複使用的程式碼,我們通常可以寫在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.ServerPage.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();
}

沒有留言:

張貼留言