2010-12-04 1 views
8

나는 단지 재미를 위해 "최소한의"ASP.Net으로 장난하고있다. 나는 많은 것을 무력화 시켰고, 재 구현하려고 시도하고있다. 내가 알 수없는 한 가지는 ASP.Net 페이지 (aspx)를 렌더링하는 방법입니다.Global.asax에서 asp.net WebForm 페이지를 렌더링하는 방법? 하나의 이유 또는 또 다른 이유에 대해

이 지금까지 내 진보 경우 : "안녕하세요 세계"처럼

//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(); 
    } 

은/정적/비트가 작동합니다. 그래도 /test1 경로를 사용할 수 없습니다. 그 지점에 도달하지만 표시되는 것은 모두 검은 색 페이지입니다.

나는이 디자이너의 내용으로 test1.aspx 페이지가 있습니다

<%@ 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> 

을 그리고 뒤에 내가 잘못 뭐하는 거지 (중요하지 않습니다 단지 비어있는 기능)

을 거의 코드가 없습니다 이리?

답변

3

여기서 HttpContext.Current.Server.Execute을 사용할 수 있습니다. HttpServerUtility.Execute을 참조하십시오.

1

내 첫 번째 생각은 숨겨진 전화를 Page.FrameworkInitialize이라고하지 않는 것입니다. 이 시나리오에서 실제로 어떤 작업을 수행 할 지 확신하지 못합니다.

또한 Page.ProcessRequest은 제공된 HttpContext로 직접 렌더링됩니다. Reflector의 ProcessRequestMain을 참조하십시오. 렌더러는 this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output))을 호출합니다.

요청 및 응답 개체를 어디에서 가져올 지 알 수 없습니다. 당신에게 보낸 HttpApplication을 sender 매개 변수로 확인 했으므로 올바른 개체를 사용하고 있는지 확인 했습니까?

+0

예들이 올바른 요청 및 응답 객체이다 : 당신이 필요가있는 무엇을 Response.Output에 test1.aspx을 렌더링하는 ASP.NET 말씀입니다 – Earlz

5

Global.asax은 붉은 청어입니다. ASP.NET이 성공적으로 요청한 페이지를 렌더링된다

test1 o=new test1(); 

test1 코드 숨김 클래스 test1.aspx 페이지입니다. 그게 네가 원하는게 아니야. 당신이보고 싶어하는 모든 것은 test1.aspx 파일에서옵니다. 그들은 Global.asax에 클래스에 내장 등이있다,

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