为什么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
}
}
这种方法有什么危险?到目前为止,一切都很好(并且页面非常丰富和复杂)。
答案 0 :(得分:2)
从您的示例中不清楚您尝试使用此代码做什么,所以这在黑暗中大多是短暂的。
您可能不需要if语句的第二部分。单独检查IsPostBack就足够了。
_requestValueCollection不是属性,它是一个字段,可能不是获取客户端提交的数据的好地方。我建议您考虑使用Form属性(this.Request.Form)或Headers属性(this.Request.Headers),具体取决于您要查找的内容。请记住,大多数情况下,您可以直接从表单上的asp.net控件获取表单值。
如果您需要确定用于调用页面的确切http方法,您可能还需要查看Request.HttpMethod属性。
修改:添加有关_requestValueCollection
的信息正在加载的_requestValueCollection背后的机制非常复杂,但我查看了MS源代码以及我可以确定实现IPostBackDataHandler接口的页面上每个控件的页面调用。对于其中的每一个,它将调用LoadPostData方法,该方法将该控件的数据添加到集合中。
我能想到的可能导致集合为空的主要内容是:
正如我所说,这有点模糊。 Page类内部非常复杂,因此数据也可以通过其他方式放入该集合中,但这是我在随意检查中找到的所有内容。