1

一連の基準が満たされたときに、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出力の振る舞いを乗り越えることについて何かを言いました(今どこにいるのか思い出せません)。

誰かが私に最良の方法を教えてくれたらとてもありがたいです。

更新: 私はこのリンクを見つけました: 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()の後のコードがまだ実行されていることです。これを回避するには、コードを再構築しますが、response.end()を使用しない場合のように、必要がない場合はより適切になります(if / elseブロックが少なくなります)。

助言がありますか?

4

2 に答える 2

0

基本的に、応答タイプをテキストに設定し、ページからすべてのHTMLを削除する必要があります。

于 2012-07-02T13:53:12.473 に答える
0

結局、Response.End()を使用して、例外を無視しました。正常に動作しているようです。

于 2012-10-23T17:08:07.370 に答える