2010-05-12 140 views
3

問題AJAX部分呈現問題

當我嘗試的默認頁使AJAX部分更新請求(使用UpdatePanel控件)一個IIS7網站,它會失敗 - 而不是返回要更新的html,它會返回整個頁面,然後導致MS AJAX Javascript拋出一個解析shit-fit。

涉嫌原因

我已經縮小的原因到兩個issues-做出一個Ajax請求的默認頁時,我有一定的自定義HTTP模塊註冊。部分渲染請求http://localhost將失敗,但部分渲染請求http://localhost/default.aspx將正常工作。 另外,如果我刪除以下行中我的自定義的HttpModule:

_application.PreRequestHandlerExecute += OnPreRequestHandlerExecute; 

的AJAX部分呈現將正常工作。很奇怪吧?

另一個奇怪的事情... 如果我看的trace.axd,我可以看到,當部分呈現請求失敗,二POST請求被記錄爲一個局部呈現一個要求─其中的Default.aspx頁面成功執行(記錄跟蹤信息,例如page_load),但沒有生成內容,另一個似乎沒有實際執行(不記錄跟蹤信息),但生成內容(HTTP_CONTENT_LENGTH大於0)。

請幫忙! 如果有熟悉HTTP模塊或MS AJAX Http模塊的人可以解釋爲什麼發生這種情況,我將非常感激。實際上,如果請求url是「/」,那麼明顯的工作就是重定向到default.aspx,但我真的很想理解爲什麼會發生這種情況。

回答

1

首先PreRequestHandlerExecute恰好在執行HTTP處理程序之前。

第二個用於在IIS7下託管HttpModules的網站,我們最好在集成管道模式下運行網站,並且我們還必須將web.config中的HttpModules標記移動到system.webServer模塊部分。

例如,如果你改變像這樣的PreRequestHandlerExecute處理程序:

void context_PreRequestHandlerExecute(object sender, EventArgs e) 
{ 
    HttpApplication application = (HttpApplication)sender; 
    HttpContext context = application.Context; 

    if( something-happened ) 
     context.Handler = null; 
} 

就像你說的,結果會完全。

將處理程序設置爲其他任何東西,但其默認值,意味着ASP.Net不負責當前的請求。

請注意,每個請求只能有一個HttpHandler。

+0

由於我離開了工作,我無法分辨這是否能解決我的(現在比較老)的問題,但謝謝你的回答,這一直很有啓發。 – WiseGuyEh 2011-09-14 10:15:26