我的代码后面声明了以下内容:
private HttpWebRequest req = null;
private IAsyncResult result = null;
我的代码后面有一个名为btnUpload的按钮点击事件:
req = (HttpWebRequest)WebRequest.Create(string.Format("{0}{1}", pageUrl.ToString(), arguments));
req.Method = "GET";
// Start the asynchronous request.
result = (IAsyncResult)req.BeginGetResponse(new AsyncCallback(RespCallback), null);
然后我在同一页面和后面的代码中有另一个按钮点击事件,名为btnSubmit,其中包含:
if (req == null)
req始终为null。如何访问req和结果变量?
答案 0 :(得分:2)
这是因为您的Page
对象实例在多个HTTP请求中不存在。此行为是在ASP.NET中设计的。
您应该查看PageAsyncTask
课程。这个blog post可能对学习如何使用它很有用。
答案 1 :(得分:1)
如果您正在执行异步请求,则只能访问回调方法RespCallback
中的结果。您还需要将原始请求传入异步调用以获取响应。请看以下示例:
protected void Page_Load(object sender, EventArgs e)
{
HttpWebRequest req;
req = (HttpWebRequest)WebRequest.Create(string.Format("{0}{1}", pageUrl.ToString(), arguments));
req.Method = "GET";
// pass in request so we can retrieve it later
req.BeginGetResponse(new AsyncCallback(RespCallback), req);
}
void RespCallback(IAsyncResult result)
{
HttpWebRequest originalRequest = (HttpWebRequest)result.AsyncState;
HttpWebResponse response = (HttpWebResponse)originalRequest.EndGetResponse(result);
// response.GetResponseStream()
}
答案 2 :(得分:0)
web(编程)是无状态的(除了由viewstate维护的一些人工webforms UI状态),这意味着如果你在btnUpload_Click中实例化对象,那么它将不会出现在另一个按钮事件中。所以你要么需要重新创建对象等,例如两个按钮的事件中的HttpWebRequest或存储btnUpload_Click的结果(例如在Session中)并从btnSubmit_click访问它。同时google for ASP.net页面生命周期。
希望这有帮助