2017-03-31 70 views
0

我在的.ascx一些代碼,看起來像這樣:內嵌代碼將導致ASP.NET插入當前頁面內500頁

<% 
int a = 0; 
int b = 5; 
int c = b/a; 
%> 

拋出一個500錯誤,你會期望(除0) 。

的customErrors看起來像這樣

<customErrors mode="On" redirectMode="ResponseRewrite"> 
     <error statusCode="500" redirect="/500.aspx" /> 
    </customErrors> 

我得到一個搞砸了渲染我試圖打的頁面。查看源代碼,我看到正常頁面的一半,那麼500頁面會跟着它。

<div class="mapTextOverlay" style="width:448px;padding-left:232.96px;"> 

    [main page abruptly ends here and the 500 page starts] 

    <!DOCTYPE html> 

    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head id="Head"><title> 
     500 
    </title> 

    [etc.] 

所以服務器傳輸發生在頁面呈現的中間。

如何防止出現500錯誤時出現部分頁面渲染的可能性?

  • 只有內聯代碼纔會發生這種情況,如果錯誤處於代碼隱藏狀態,則錯誤顯示正常。
  • 代碼沒有被調用Response.Flush()
  • Response.BufferOutput是真的
  • 的代碼設置Response.Filter,但我想評論說,它並沒有解決它
+0

這不是正常行爲 - 整個頁面將在任何*響應發送到客戶端之前執行。所以它不能發送給你一個部分響應,然後發送一個不同的響應。你是否通過AJAX加載其他頁面?似乎您的問題缺少[MCVE](http://stackoverflow.com/help/mcve)。 – mason

回答

0

我仍然不知道爲什麼會發生這種情況,但修復結果相當簡單。

Response.Clear();放在500頁的Page_Load()中。

+0

我認爲,在內聯代碼的情況下,響應已經在構建,無論HTML是由頁面還是控件在生成內聯代碼之前生成的;所以當自定義錯誤頁面被調用時,它只是添加到現有的響應中。 – Otis