2011-03-22 55 views
2

(我認爲,這既適用於普通的ASP.NET Web部件和SharePoint託管Web部件)如何從一個Web部件內停止頁面執行

Web部件有一個「出口」按鈕呈現輸出爲csv並設置相應的標題,以便在Excel中打開它。

掛鉤的按鈕單擊事件,清除反應,加入適當的標題和內容類型是微不足道的 - example

不過,我已經注意到,如果這個代碼添加到Web部件和調試器附着那麼如果在頁面上有這個(或任何其他)Web部件的多個實例,然後既不是HTTPApplication.CompleteRequest或Response.End停止處理/頁面生命週期,並且所有頁面控件的所有事件仍然觸發。

這個例子很浪費,因爲其他Web部件不需要運行 - 他們所做的任何事情都不會得到響應。

任何阻止其他Web部件被渲染的方法?

回答

1

如何創建另一個頁面,爲您實現實際的導出功能,然後讓導出鏈接僅僅鏈接到這個其他頁面?

這應該可以解決手動終止請求的問題,因爲您可以準確控制響應中輸出的內容。

+0

這將工作,幾乎肯定是大多數情況下去的方式 - 但在這種情況下,我有Web部件連接提供一些數據(在渲染階段之前的方式),我會失去該上下文。我的解決方法是在OnPreRender中將所有Page.Controls []。設置爲false,至少停止RenderWebPart等的運行。 – Ryan 2011-03-22 19:27:15

+0

您可以在新窗口中打開鏈接,這樣您就不會離開頁面。任何必要的數據都可以通過查詢字符串傳遞或存儲在會話變量中。 – 2011-03-22 20:01:57

0

簡答:沒有。

由於您正在進行完整回發,因此HTTP響應流必須包含服務器提供的整個HTML頁面。

您可以使用ASP.NET輸出緩存並通過某些參數刷新緩存,從而使您的頁面可以呈現更改其數據的此類Web部件。

瞭解更多關於ASP.NET緩存閱讀本文件:

+0

Postback將返回csv文件,因此不會刷新頁面,因此不需要重新創建頁面。 – Ryan 2011-03-22 17:40:56

0
HttpContext.Current.Response.End(); 

只是爲了與ASP的兼容性。

ApplicationInstance.CompleteRequest(); 

應該做你想做的。

+0

假設 - 但不 – Ryan 2011-03-22 17:39:52