2012-06-30 126 views
1

我希望能夠輸出一個簡單的字符串作爲文本而不是HTML頁面,當滿足一組條件時。我目前正在使用:如何輸出字符串而不是HTML頁面?

Protected Sub OutputString(ByVal Str As String) 
    Dim bytes() As Byte 
    bytes = System.Text.Encoding.UTF8.GetBytes(Str) 
    Response.ContentType = "text/plain" 
    Response.OutputStream.Write(bytes, 0, bytes.Length) 
    Response.End() 
End Sub 

這個偉大工程,正是我想要做什麼,然而,到Response.End()產生異常和(我認爲)應該儘可能地避免。

我想我可以使用一個單獨的「空」頁面,此代碼,但它不是一個解決方案的更多作品的周圍。另外,有人說了一些關於HTML輸出行爲的問題(現在不記得在哪裏)。

我會很感激,如果有人能告訴我最好的方法。

UPDATE: 我發現這個鏈接: Response.Redirect(url) ThreadAbortException Solution

它建議使用HttpContext.Current.ApplicationInstance.CompleteRequest()和超過騎着渲染頁面的功能:

Dim DoNotOutputHTML As Boolean = False 

Protected Overrides Sub RaisePostBackEvent(sourceControl As IPostBackEventHandler, eventArgument As String) 
    If DoNotOutputHTML = False Then 
     MyBase.RaisePostBackEvent(sourceControl, eventArgument) 
    End If 
End Sub 

Protected Overrides Sub Render(writer As HtmlTextWriter) 
    If DoNotOutputHTML = False Then 
     MyBase.Render(writer) 
    End If 
End Sub 

你然後可以通過設置變量DoNotOutputHTML來選擇是否輸出您的html頁面。

我有這個唯一的問題是,(在CompleteRequest之後的任何代碼)仍執行。我可以解決此通過重組我的代碼,雖然這將是整潔(較少的if/else塊),如果我沒得,就像我不跟到Response.End()

有什麼建議?

+1

這不是一個回答你的問題,但我認爲你可以使用'Response.Write',而不是直接寫入的字節數。 – Ryan

+0

你用'Response.End() '得到了什麼異常? –

+1

@minitech完全正確。我多麼愚蠢?大聲笑。不知道爲什麼我沒有想到這一點。 – Gravitate

回答

0

最後,我只是到Response.End使用()而忽略了異常。似乎工作正常。

0

基本上,您需要將響應類型設置爲文本,並從頁面中刪除所有HTML。

+0

感謝您的回覆。我確實說過這是我的問題中的一個選項,但是,這意味着頁面生命週期仍然會被處理(儘管它是空白的),這將不會像它可能的那樣高效。我還想在輸出不被執行之後停止任何代碼,只是response.end()目前正在做什麼。 – Gravitate

相關問題