.ashx处理程序中的PreviousPage

时间:2013-04-08 12:29:55

标签: c# asp.net httphandler ashx

是否可以在.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

1 个答案:

答案 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来查找必要的控件并从中获取输入。