ASP.NET:为什么PostBack上的“_requestValueCollection”为空?

时间:2009-09-25 16:43:27

标签: asp.net postback

为什么PostBack上的“_requestValueCollection”为空?

我有一个非常奇怪的回帖问题。在某些情况下,在post backs(this.Request.RequestType ==“POST”)上有null“_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

        }
    }

这种方法有什么危险?到目前为止,一切都很好(并且页面非常丰富和复杂)。

1 个答案:

答案 0 :(得分:2)

从您的示例中不清楚您尝试使用此代码做什么,所以这在黑暗中大多是短暂的。

您可能不需要if语句的第二部分。单独检查IsPostBack就足够了。

_requestValueCollection不是属性,它是一个字段,可能不是获取客户端提交的数据的好地方。我建议您考虑使用Form属性(this.Request.Form)或Headers属性(this.Request.Headers),具体取决于您要查找的内容。请记住,大多数情况下,您可以直接从表单上的asp.net控件获取表单值。

如果您需要确定用于调用页面的确切http方法,您可能还需要查看Request.HttpMethod属性。


修改:添加有关_requestValueCollection

的信息

正在加载的_requestValueCollection背后的机制非常复杂,但我查看了MS源代码以及我可以确定实现IPostBackDataHandler接口的页面上每个控件的页面调用。对于其中的每一个,它将调用LoadPostData方法,该方法将该控件的数据添加到集合中。

我能想到的可能导致集合为空的主要内容是:

  • 页面上没有服务器控件实现IPostBackDataHandler
  • 没有服务器表单,或者客户端未发送表单内容
  • 或者,页面可能正在使用查询字符串将数据传送到服务器,而查询字符串不包含任何内容

正如我所说,这有点模糊。 Page类内部非常复杂,因此数据也可以通过其他方式放入该集合中,但这是我在随意检查中找到的所有内容。