2009-09-25 28 views
1

爲什麼PostBack上的「_requestValueCollection」爲空?ASP.NET:爲什麼在PostBack上「_requestValueCollection」爲空?

我有一個非常奇怪的問題,後貼。在某些情況下,在帖子後面(this.Request.RequestType ==「POST」)有空「_requestValueCollection」成員。而對於ASP.NET來說,這意味着this.IsPostBack == false。

所以我已經修改了的Page_Load以下列方式:

protected void Page_Load(object sender, EventArgs e) 
    { 

     if (!this.IsPostBack && this.Request.RequestType != "POST") 
     { 
      //REGULAR INIT STUFF 

     } 
     else 
     { 
      //REGULAR SITE POSTBACK STUFF 

     } 
    } 

這是什麼做法可能存在的危險?到目前爲止,一切都很好(並且是相當豐富和複雜的頁面)。

回答

2

從你的例子中不清楚你試圖用這個代碼做什麼,所以這在黑暗中大多是短暫的。

您可能不需要if語句的第二部分。單獨檢查IsPostBack應該足夠了。

_requestValueCollection不是屬性,它是一個字段,可能不是獲取客戶端提交的數據的好地方。我建議您考慮使用Form屬性(this.Request.Form)或Headers屬性(this.Request.Headers),具體取決於您要查找的內容。請記住,大多數情況下,您可以直接從窗體上的asp.net控件獲取表單值。

如果您需要確定用於調用頁面的確切http方法,您可能還需要查看Request.HttpMethod屬性。


編輯:添加信息關於_requestValueCollection

背後的_requestValueCollection正在加載的機制是相當複雜的,但我看了看在MS源,從我能確定每個頁面調用控制實現IPostBackDataHandler接口的頁面。對於其中的每一個,它都會調用LoadPostData方法,將該控件的數據添加到集合中。

,我能想到的把我的頭頂部的主要的東西,可能會導致集合爲空是:

  • 在頁面上沒有任何服務器控件實現IPostBackDataHandler
  • 沒有服務器形式,或表格的內容並沒有被客戶
  • 或者發送的頁面可能是使用查詢字符串來傳送數據到服務器,並查詢字符串中不包含任何

正如我所說,這有點模糊。頁面類在內部是非常複雜的,所以數據也可以通過其他方式加入到這個集合中,但是這是我在偶然考試中可以找到的所有內容。

+0

「_requestValueCollection不是屬性」對不起,我的錯誤,是一個私人成員具體。 – 2009-09-25 17:09:33

+0

所以這是你的問題:爲什麼requestValueCollection在回發中爲空? – Nirlep 2009-09-25 17:17:31

+0

是啊!這是我的第一句話...... – 2009-09-25 17:21:34