Zoals de titel al zegt: Ik wil een web page die als embedded resource in een class library staat openen.
Dit lukt allemaal prima met html-files, jpg's e.d. zonder problemen.
Daarvoor maak ik gebruik van de IHttpHandler-interface. Dat werkt prima.
In web.config "routeer" ik een bepaalde .aspx pagina naar de HttpHandler en deze handelt dan bepaalde requests af (in de sub ProcessRequest).
Het probleem is dat dit voor .aspx-files niet gaat werken. Deze moeten tenslotte eerste gerendered worden en dat gebeurt dus niet; wat op zich logisch is.
Voor de duidelijkheid:
in web.config staat:
en vervolgens in de class DevicesWebHandler (die IHttpHandler implementeert):
Vervolgens kan de request uitgevoerd worden met context.Response.Outputstream en context.Response.ContentType.
De vraag is dus of ik dit systeem ook los kan laten op een webpage (al dan niet met een codebehind-file). Ik had het ContentType al gewijzigd in "text/aspx", maar dan wordt het bestand gewoon gedownload (en geopend in VS.NET). Ook geprobeerd om met HtmlTextWriter de Page handmatig (met RenderControl) te renderen en dan terug te sturen, maar dat leverde ook niets op.
Het idee is dat de webpage een pop-upscherm is die hoort bij een WebControl. Die WebControl staat in de Class Library en dus is het wel zo handig dat een pop-up-invulscherm dan ook daarin staat.
Dit lukt allemaal prima met html-files, jpg's e.d. zonder problemen.
Daarvoor maak ik gebruik van de IHttpHandler-interface. Dat werkt prima.
In web.config "routeer" ik een bepaalde .aspx pagina naar de HttpHandler en deze handelt dan bepaalde requests af (in de sub ProcessRequest).
Het probleem is dat dit voor .aspx-files niet gaat werken. Deze moeten tenslotte eerste gerendered worden en dat gebeurt dus niet; wat op zich logisch is.
Voor de duidelijkheid:
in web.config staat:
code:
1
2
3
| <httpHandlers>
<add verb="*" path="dllDevicesWeb.aspx" type="BE.DevicesWebHandler,DevicesWeb"/>
</httpHandlers> |
en vervolgens in de class DevicesWebHandler (die IHttpHandler implementeert):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
If context.Request.Params.HasKeys = False Then
Exit Sub
End If
Dim key As String = context.Request.Params.GetKey(0).ToLower
Dim file As String = context.Request.Params.Item(key)
'file is nu de file die we moeten hebben
Select Case key
Case "image"
Me.SendImage(context, file)
Case "html"
Me.SendHtml(context, file)
Case "aspx"
Me.SendAspx(context, file)
Case Else
context.Response.Write("De key " + key + " wordt niet ondersteund in deze library.")
End Select
End Sub |
Vervolgens kan de request uitgevoerd worden met context.Response.Outputstream en context.Response.ContentType.
De vraag is dus of ik dit systeem ook los kan laten op een webpage (al dan niet met een codebehind-file). Ik had het ContentType al gewijzigd in "text/aspx", maar dan wordt het bestand gewoon gedownload (en geopend in VS.NET). Ook geprobeerd om met HtmlTextWriter de Page handmatig (met RenderControl) te renderen en dan terug te sturen, maar dat leverde ook niets op.
Het idee is dat de webpage een pop-upscherm is die hoort bij een WebControl. Die WebControl staat in de Class Library en dus is het wel zo handig dat een pop-up-invulscherm dan ook daarin staat.
30Drie Web Design & IT Consultancy | Raven Consultancy Services