簡體   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