2010-12-04 22 views
8

por una razón u otra estoy jugando con una ASP.Net "minimalista" solo por diversión. He desactivado muchas cosas y estoy tratando de volver a implementar las cosas. Una cosa que no puedo entender es cómo renderizar una página ASP.Net (aspx).¿Cómo renderizar una página asp.net WebForm de Global.asax?

Ésta es mi progreso hasta el momento:

//global.asax 
    protected virtual void Application_BeginRequest (Object sender, EventArgs e) 
    { 
     HtmlTextWriter writer=new HtmlTextWriter(Response.Output); 
     if(Request.Url.AbsolutePath.Substring(0,Math.Min(Request.Url.AbsolutePath.Length,8))=="/static/"){ 
      return; //let it just serve the static files 
     }else if(Request.Url.AbsolutePath=="/test1"){ 
      test1 o=new test1(); 
      o.ProcessRequest(Context); 
      o.RenderControl(writer); 
      writer.Flush(); 
      writer.Close(); 
      Response.Flush(); 
     // Response.Write(writer.ToString()); 

     }else{ 
      Response.ContentType="text/plain"; 
      Response.Write("Hi world!"); 
     } 
     CompleteRequest(); 
    } 

el/estática/bit funciona igual que el "mundo de alta". Aunque no puedo hacer funcionar la ruta /test1. Llega a ese punto, pero todo lo que se muestra es una página negra.

tengo una página test1.aspx con este contenido diseñador:

<%@ Page Language="C#" Inherits="namespace.test1" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head> 
    <title>test1</title> 
</head> 
<body> 
    <form id="form1"> <!--just testing if two forms works and such--> 

    </form> 
    <form id="form2"> 
    <input type="text" id="test1" /> 
    </form> 
</body> 
</html> 

y tiene casi ningún código detrás (sólo una función de vacío que no importa)

¿Qué estoy haciendo mal ¿aquí?

Respuesta

1

Lo primero que pensé es que no llamas al Page.FrameworkInitialize oculto. No estoy seguro de que realmente haga algo por ti en este escenario.

También creo que Page.ProcessRequest se procesará directamente en el HttpContext proporcionado. Consulte ProcessRequestMain en Reflector, durante Renderizarlo llama al this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output)).

No llegamos a ver de dónde obtienes tu objeto de Solicitud y respuesta. ¿Ha comprobado la HttpApplication que se le envió como el parámetro sender, por lo que está seguro de que está utilizando los objetos correctos?

+0

sí que son correctos los objetos de solicitud y respuesta, son como integrado en la clase global.asax – Earlz

5

Global.asax es una pista falsa. ASP.NET está prestando con éxito la página solicitada:

test1 o=new test1(); 

test1 es la clase de código subyacente de la página test1.aspx. Sin embargo, eso no es lo que quieres, ¿ves? Todo lo que espera ver proviene del archivo test1.aspx. Lo que hay que hacer es decirle a ASP.NET para rendir test1.aspx a Response.Output:

using (var o = (Page) BuildManager.CreateInstanceFromVirtualPath("/test1.aspx", typeof (Page))) { 
    o.ProcessRequest(Context); 
} 
Cuestiones relacionadas