Forums Neueste Beiträge
 

Control-Rendern unterbinden

07/10/2008 - 20:57 von Marvin Massih | Report spam
Hallo,

ich habe eine WebForm mit ein paar Controls.
Unter bestimmten Umstànden sollen diese jedoch nicht gerendert, sondern
anderer Inhalt (PDF, reiner Text, reines HTML) zurückgeliefert werden.

Wenn ich ein PDF zurücksende (Aufruf aus Page_Load), klappt das noch
ganz gut:

private void ExportToPdf( )
{
Response.Clear( );

Response.AddHeader( "content-disposition",
"inline; filename=\"MeinPdf.pdf\"" );
Response.ContentType = "application/pdf";
WritePdfData( Response.OutputStream );
}

Versuche ich jedoch dasselbe mit HTML- oder reinen Textdaten
(Content-Type "text/plain"), so werden immer noch die Controls und der
Rest der HTML-Seite gerendert.
Wie kann ich das unterbinden?

Response.End() führt zu einer ThreadAbortException...

Gruß
Marvin
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
07/10/2008 - 21:35 | Warnen spam
Hallo Marvin,

"Marvin Massih" schrieb:

Unter bestimmten Umstànden sollen diese jedoch nicht gerendert, sondern
anderer Inhalt (PDF, reiner Text, reines HTML) zurückgeliefert werden.



Dafür würde sich eine Umleitung bzw. ein Link auf einen Handler (ASHX)
anbieten.

Versuche ich jedoch dasselbe mit HTML- oder reinen Textdaten
(Content-Type "text/plain"), so werden immer noch die Controls und der
Rest der HTML-Seite gerendert.



Das passiert auch beim PDF. Je nach PDF Reader siehst Du das nur nicht.

Wie kann ich das unterbinden?



Verwende einen Handler für solche Ausgaben.

Response.End() führt zu einer ThreadAbortException...



Das ist normal, stört aber nicht weiter.

Response.Redirect( ~/Handler.ashx?Mach=Was", False )

wàre in dem Fall sinnvoller.

[Download.ashx]
<%@ WebHandler Language="VB" Class="Download" %>

Imports System
Imports System.Web
Imports System.IO

Public Class Download : Implements IHttpHandler

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

...

End Sub

Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property

End Class

Der Link sieht dann in etwa so aus: <a href="Download.ashx">Download</a>
Die Umleitung in etwa so: Response.Redirect( "~/Download.ashx", False )

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen