2011-12-29 67 views
0

我想創建我的「定製的IsPostBack」,我所做的就是創建一個布爾值屬性,的IsPostBack定製

bool test; 
public bool MyPostBack 
{ 
    get{ test = Page.IsPostBack; return test; } 
    set{ test = value; } 
} 

調試時,將其具有,例如,值設置爲false,當測試爲真,後按F11,測試保持原樣!我覺得這很奇怪。你有什麼想法,爲什麼?謝謝。

+1

您需要調用'MyPostBack'來更改'test'。 – 2011-12-29 15:09:50

+0

你的意思是我需要做的:set {MyPostBack = value;} – test 2011-12-29 15:11:10

+2

你想要做什麼? – SLaks 2011-12-29 15:11:19

回答

6

你的屬性的getter做的第一件事就是正在重置它:

test = Page.IsPostBack; 

所以,因爲該值設定要被重寫你每次設置你的MyPostBack屬性將也基本沒有影響得到的財產價值。

你可能想要更多的東西是這樣的:

bool test; 

public bool MyPostBack 
{ 
    get{ return test; } 
    set{ test = value; } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    MyPostBack = Page.IsPostBack; 
} 

私有變量(測試)的頁面加載事件被初始化頁面的IsPostBack屬性的值。

+0

問題是,在調試過程中,當逐步瀏覽代碼時,var test沒有正確設置!我會試試這個,非常感謝你 – test 2011-12-29 15:15:28

+0

對!變量初始值設定項會在頁面生命週期中過早地設置該值。當變量初始化器執行時,Page.IsPostBack設置不正確。您需要在Page_Load事件中設置測試變量。我已經更新了我的答案以反映這一點。 – 2011-12-29 19:48:03

2

每當您閱讀酒店時,您的獲得者都將該字段重置爲原始的Page.IsPostBack

+0

好了,現在我明白了,謝謝每一位,因爲我的代碼中存在錯誤,當我在調試期間調試並嘗試更改其值時,它也被重置!這解決了我的問題,現在我已經完成了我的第一個電子商務網站:)謝謝大家! – test 2011-12-29 15:20:56

0

我想提出另一種方法來做到這一點。 最有可能,你想保持這個會話,這樣你就可以做到以下幾點:

public bool MyPostBack 
{ 
    get 
    { 
     if (Session["MyPostBack"] == null) 
      Session["MyPostBack"] = Page.IsPostBack; 

     return (bool)Session["MyPostBack"]; 
    } 
    set 
    { 
     Session["MyPostBack"] = value; 
    } 
} 

這樣,MyPostBack總是會返回一個有效的值,即使你沒有初始化。它將在Page_Load之前(例如在Page_Init中)可用。

我也認爲最好不要爲它設置setter,但在getter中有更多的計算。否則,根據我的經驗,如果在超過一種或兩種情況下設置其值時,代碼可能變得不可讀,且不易維護。