【问题标题】:PreviousPage in .ashx handler.ashx 处理程序中的上一页
【发布时间】:2013-03-30 12:46:28
【问题描述】:

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

【问题讨论】:

  • 也许试试referer属性?
  • @EladLachmi 这样可以得到上一页的URL;但是,这不等同于 Page.PreviousPage,因为不会有维护的视图状态。
  • 我认为即使您可以获得页面对象,也不会维护视图状态。如果您需要来自该页面的数据,发个帖子怎么样?
  • @EladLachmi 抱歉,当我写“viewstate”时,我真正想写的是“控件集合”。请查看我更新的问题。
  • 基本相同...您需要控件内的值,并且这些值保留在视图状态中。即使您设法通过页面对象 AFAIK 获得引用,它们也将不可用。

标签: c# asp.net httphandler ashx


【解决方案1】:

PreviousHandler 在这里帮不了你。要让您的 HttpHandler 接收跨页 PostBack,您必须了解它的底层工作原理。

参考:Redirecting Users to Another Page

跨页发布类似于超链接,因为它的传输是 由用户操作发起。但是,在跨页面发布中,目标 页面使用 HTTP POST 命令调用,该命令发送的值 源页面上的控件到目标页面。此外,如果 源页面和目标页面在同一个 Web 应用程序中,目标 page 可以访问源页面的公共属性。一如既往,所有 应用程序中的页面可以共享存储在 会话状态或应用程序状态。

读完之后就会明白,您要查找的所有值实际上都作为 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 来查找必要的控件并从中获取输入。

【讨论】:

  • 嗨 nunespascal - 事实上,我可以通过 Request.Form 访问我想要的值;但是,这些值都是从 WebControls 发布的,因此具有通常晦涩难懂的 POST 变量名称 (ctl00$WebFormsContent$...),我宁愿避免硬编码。
  • 添加了动态创建Page对象来处理post数据的步骤。您现在应该能够从中获取任何数据,就像使用 PreviousPage 一样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
  • 2012-11-25
  • 2013-03-16
相关资源
最近更新 更多