2009-10-15 57 views
0

這可能是真的哈克,但我開始變得絕望是否可以阻止請求進入頁面?

是否有可能阻止實際擊中實際頁面...即一個請求,我可以寫東西的Application_BeginRequest處理該部分我想要,然後跳過生命週期的其餘部分?

哦,是有可能做到這一點以這樣的方式使AJAX更新面板不發脾氣(返回一些默認的內容,說:「我沒有做任何對不起」)

好,瘋狂的問題結束。

回答

1

考慮在請求處理流程的前端寫一個HTTPModule來處理這個問題。

+0

這可以工作 - 它如何防止請求進一步通過HTTPModule? – Paul 2009-10-15 15:53:15

+1

@IP - Response.CompleteRequest將停止請求。 – David 2009-10-16 19:42:54

0

當然,只是到Response.End調用():

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if (Request.Url.AbsolutePath.Equals("/PageYouWantToSuppress.aspx", StringComparison.OrdinalIgnoreCase)) 
    { 
     // Do your stuff 

     Response.End(); 
    } 
} 

ETA:我不知道你的問題的UpdatePanel的一部分。

+0

是的,這個我試過 - 它似乎工作,但不會返回更新面板所需的東西。任何人都知道更新面板需要滿足什麼? – Paul 2009-10-15 15:54:40

2

您可以防止部分代碼的從這樣的部分頁面更新期間執行:

if (! ScriptManager.IsInAsyncPostBack) { 
    // Code in here won't happen during UpdatePanel actions 
} 

UpdatePanel的執行大部分的ASP.NET頁面生命週期的設計。如果您中止該流程(例如通過Response.End()),則請求無法完成,因此客戶端將無法獲取更新頁面HTML所需的數據。

當觸發一個UpdatePanel ASP.NET服務器端方法執行以下操作:

  1. 由通過正常的ASP.NET頁面的生命週期運行重建從頭面板內的頁面的部分(好吧,稍微刪節,但接近)。
  2. 將面板的HTML發送回客戶端。
  3. 使用javascript DOM操作重建客戶端上的面板。

(詳細見my recent answer to this question,看看UpdatePanel Control Overviewthis article瞭解詳細信息)

有幾種替代UpdatePanel的AJAX實現不涉及在整個頁面生命週期去。其中最受歡迎的是Using jQuery to directly call ASP.NET AJAX page methods

使用jQuery進行AJAX調用可以讓你更接近金屬(可以這麼說),而不是UpdatePanels,但是有很多好的幫助讓你開始 - 在StackOverflow本身和Encosia(最後一個鏈接的源代碼) 。