.ashx处理程序中的PreviousPage
本文关键字:PreviousPage 程序 处理 ashx | 更新日期: 2023-09-27 18:08:16
是否有可能在通用的。ashx处理程序中检索等效的Page.PreviousPage
,然后从。aspx页面进行跨页PostBack ?
我需要从执行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
?
PreviousHandler
在这里帮不了你。要让HttpHandler接收跨页面PostBack,您必须了解其底层工作原理。
参考:重定向用户到另一个页面
跨页发布与超链接类似,因为传输是由用户动作发起。但是,在跨页张贴时,目标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
来查找必要的控件并从中获取输入。