2011-04-04 33 views
0

我有一種以神祕方式工作的方法。令人費解的行爲的.NET方法

運行這個工作正常;

FindConcept("Product"); 

即使SelCatID的值是「Product」,運行此操作會產生(不需要的)不同結果。

FindConcept(SelectedCategoryID); 

凡SelectedCategoryID樣子:

protected string SelectedCategoryID 
{ 
    get 
    { 
     if (Request["c"] != null) 
     { 
      string c = Request["c"]; 
      ViewState["SelectedCategoryID"] = c; 
      return c; 
     } 

     if (ViewState["SelectedCategoryID"] != null) 
     { 
      string cid = ViewState["SelectedCategoryID"] as string; 
      if (!string.IsNullOrEmpty(cid)) 
      { 
       return cid; 
      } 
      return ""; 
     } 
     else 
      return ""; 
    } 
} 

這使我相信,必須在SelectedCategoryID對象的get-方法一些奇怪的副作用。我是.NET新手,所以我對ViewState的工作原理並不瞭解。

我已經試過無數方法調試這一點,比如我已經試過這樣:

System.Diagnostics.Debug.WriteLine(SelectedCategoryID); 
FindConcept(SelectedCategoryID); 

凡的Debug.WriteLine會產生「產品」,這應該意味着FindConcept行爲與預期相同。

這讓我完全不解。我應該如何繼續解決這個問題?

+1

單元測試的東西,例如沿..... – 2011-04-04 15:11:24

+0

你的問題不是很清楚,你的產品是把和失控產品。這不是你想要的嗎? SelectCategoryId在哪裏? – Cyberdrew 2011-04-04 15:12:30

+1

此行爲只能用FindConcept中的代碼來解釋。 – 2011-04-04 15:12:38

回答

1

ASP.NET中的ViewState webforms是作爲隱藏的表單字段(編碼的,通常是加密的)寫出來的。

這意味着視圖狀態將可在回發請求,但整個HTTP重定向不可用。

在上面的代碼,它看起來像代碼試圖同時處理後背上和其他類型的請求 - 因爲它使用了哪些

獲取指定對象的餅乾響應特性索引,表單,查詢字符串或ServerVariables http://msdn.microsoft.com/en-us/library/system.web.httprequest.item%28VS.71%29.aspx

一種可能的情況是,你不沿着使用上述方法之一的信息,這意味着視圖狀態不可通過重定向,信息也無法使用該URL查詢字符串或餅乾等

編輯 - 舉例

有許多方面,這可以看看,這裏是一個簡單的例子: 例如,假設在一個頁面上您檢索「SelectedCategoryID」從數據庫在GridView中。在默認情況下,這將存儲在頁面的Gridview中,並且在回發到相同頁面時將在視圖狀態中可用(請參閱http://www.xefteri.com/articles/show.cfm?id=18http://msdn.microsoft.com/en-us/library/ms972976.aspx)。

但是,假設一個按鈕單擊響應按鈕點擊如

Response.Redirect("SomeOtherPage.aspx") 

在這種情況下做了關於「SomeOtherPage.aspx」 ViewState中不包含該值,讓你的getter將在其他地方尋找價值,比如url。在這種情況下,你可以通過「SelectedCategorID」與作爲

Response.Redirect("SomeOtherPage.aspx?c=" + HttpUtility.UrlEncode(selectedCategoryId)); 
+0

感謝您的回覆。我不得不承認,對我來說這聽起來像是古希臘語,你能否給我舉個例子說明這可以如何幫助我解決我的問題? – 2011-04-05 08:12:59

+0

@Emil - 編輯答案舉例 – Nathan 2011-04-05 18:55:19

相關問題