2012-06-30 2 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 

You затем может выбрать, выводить ли вашу html-страницу, устанавливая переменную DoNotOutputHTML.

Единственная проблема, с которой я столкнулся, заключается в том, что любой код после выполнения CompleteRequest() все еще выполняется. Я могу обойти это, отредактировав свой код, хотя он был бы более аккуратным (менее, если/else блоки), если бы мне не пришлось, например, я не отвечаю.ответ()

Любые предложения?

+1

Это не ответ на ваш вопрос, но я думаю, вы можете просто использовать 'Response.Write' вместо того, чтобы напрямую писать байты. – Ryan

+0

Какие исключения вы получаете с помощью 'Response.End() '? –

+1

@minitech Совершенно верно. Как я тупой? лол. Не знаю, почему я об этом не думал. – Gravitate

ответ

0

В конце концов, я просто использовал Response.End() и проигнорировал исключения. Кажется, хорошо работает.

0

В принципе, вам нужно задать тип ответа для текста и удалить весь HTML со страницы.

+0

Спасибо за ответ. Я действительно сказал, что это вариант в моем вопросе, однако это будет означать, что жизненный цикл страницы все равно будет обрабатываться (даже если он пуст), который не был бы настолько эффективным, насколько это могло бы быть. Я также хотел бы остановить любой код после того, как результат не будет выполнен, как это делает response.end(). – Gravitate

Смежные вопросы