2011-08-12 73 views
4
Dictionary<string, string> propertyCompany = new Dictionary<string, string>();//gloabal variable 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!isPostBack){ 
     propertyCompany .add("a","1"); 
     propertyCompany .add("b","2"); 
     propertyCompany .add("c","3"); 
    } 
} 

protected void btnGetProperty_Click(object sender, EventArgs e) 
{ 
     string a=propertyCompany["a"];//error this key is not exist 
    //propertyCompany is null 
} 

定義propertyCompany並填入form_load。在點擊按鈕propertyCompany是空的!?全局變量爲空

我使用static但我不明白有時候說錯誤爲空。

+0

'null'或只是空的?你真的認爲你在'Page_Load'中添加的三個項目不存在於'btnGetProperty_Click'中嗎? –

+0

@Graham除非有代碼,我們沒有看到它影響的東西,我敢肯定它是「沒有數據」而不是'null'。初始化器將被添加到構造函數的開始處,並且將在每個頁面加載時運行。 – dlev

+0

@dlev:是的,我確定是這種情況,我只是試圖提示OP更仔細地檢查一些事情...... –

回答

4

每個請求創建新頁面對象,所以你不能在第二個請求(BNT點擊)字典您在第一次請求創建(無回傳負荷)

的回發了速戰速決刪除測試使用。

其他修復可能性: *在視圖狀態下存儲字典。

+0

我想在測試中使用這個變量 – ashkufaraz

+0

所以只要刪除if!(!isPostBack){條件 –

-1

嘗試這種

Dictionary<string, string> propertyCompany;//gloabal variable 

protected void Page_Load(object sender, EventArgs e) 
{ 
    propertyCompany = new Dictionary<string, string>(); 
    if(!isPostBack){ 
     propertyCompany .add("a","1"); 
     propertyCompany .add("b","2"); 
     propertyCompany .add("c","3"); 
    } 
} 

保護無效btnGetProperty_Click(對象發件人,EventArgs的) { // propertyCompany爲null }

1

在一個類繼承Web.UI.Page定義的每個變量將在被破壞如果你不重新初始化,它將在Postback中爲null

在回發中堅持它的一種方法是將其存儲在Session-variable中。

你會發現關於如何堅持在回發此變量的所有選項的完整列表:http://msdn.microsoft.com/en-us/magazine/cc300437.aspx

  • 應用
  • 餅乾
  • 表單提交/隱藏的表單字段
  • 查詢字符串
  • Session
  • ASP.NET中的新狀態容器
  • 緩存
  • 語境
  • 的ViewState
  • 的Web.config和Machine.config中的文件 結論

這是在HTTP-protocol的性質,這是無國籍

0

讓字典在請求之間生存的一種方法是聲明它是靜態的,或者像前面提到的那樣在視圖狀態中聲明它。

0

如何在按鈕點擊事件中訪問propertyCompany中的項目?如果你做錯了,那很可能是問題。

1

我很確定你的標題應該是「全局變量沒有我想要的數據。「這本詞典將每個頁面加載時間(回發或以其他方式)構建,但由於該行的:

if(!isPostBack) { 
} 

它不會有你想要的按鈕點擊數據

爲了通知頁面的點擊,回帖執行,所以說!isPostBack(我假設設置的地方通過Page.IsPostBack)也說「如果我沒有點擊按鈕」,這是當然不是你想要的。

爲了獲得您想要的功能,您應該將字典中的人口移出該塊,否則還有其他條件也會將其填入所需的數據。

使用類變量的另一種方法是將數據存儲在另一個位置。選項包括ViewState,Session,Application(如果它確實是應用程序範圍的數據),Cache以及其他一些選項。目前還不清楚字典究竟在做什麼,所以很難說哪個地方最合適。