是否可以在.aspx页面的跨页PostBack之后检索通用.ashx处理程序中的等效Page.PreviousPage
?
我需要从执行PostBack的页面访问一些POST值 - 虽然我可以简单地使用Request.Form
- 所讨论的值来自WebControls,因此,相当模糊(并且不是非常强大)名称(例如ctl00 $ WebFormsContent $ SomeControl $ SomeOtherControl $ txtWhatever)。
我尝试了以下内容:
public void ProcessRequest(HttpContext context)
{
Page previous = context.PreviousHandler as Page;
if (previous != null)
context.Response.Redirect("http://www.google.com");
}
但是,这不起作用 - 在调试时,我可以看到context.PreviousPage
为空。
有没有办法检索此信息并将其转换为Page
?
答案 0 :(得分:3)
PreviousHandler
对您没有帮助。要让您的HttpHandler接收跨页面PostBack,您必须了解其基本工作原理。
参考:Redirecting Users to Another Page
跨页面发布类似于传输的超链接 由用户操作发起。但是,在跨页面发布中,目标 使用HTTP POST命令调用页面,该命令发送的值为 源页面上的控件到目标页面。另外,如果 源和目标页面在同一个Web应用程序中,即目标 页面可以访问源页面的公共属性。一如既往 应用程序中的页面可以共享存储的信息 会话状态或应用程序状态。
在阅读该位之后会很清楚,您要查找的所有值实际上都是作为POST变量发送给您的处理程序。
您可以在context.Request.Params
集合中找到它们。
现在您已收到来自您网页的请求,请在您的处理程序中说出Page1.aspx;我们需要创建一个可以处理和处理这个请求的对象。这是Page1对象的一个实例。
string pagePath = "~/Page1.aspx"; //virtual path to your page
Type type = BuildManager.GetCompiledType(pagePath); //find the type
//create an object of your page
Page myPage = (Page)Activator.CreateInstance(type);
myPage.ProcessRequest(HttpContext.Current); //process the request
使用对象处理完当前请求后,您会发现控件集合已填充并填充了输入数据。您现在可以使用公开的属性或FindControl
来查找必要的控件并从中获取输入。