繁体   English   中英

.ashx处理程序中的PreviousPage

[英]PreviousPage in .ashx handler

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

有没有办法检索此信息并将其转换为Page

PreviousHandler在这里不会帮到你。 要让您的HttpHandler接收跨页面PostBack,您必须了解其基本工作原理。

请参阅: 将用户重定向到另一页

跨页发布类似于超链接,因为传输是由用户操作启动的。 但是,在跨页面发布中,使用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来查找必要的控件并从中获取输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM