2010-12-04 14 views
8

私は楽しみのためだけに "最小限の" ASP.Netを使いこなしています。私は多くのことを無効にして、物事を再実装しようとしています。私がよく分かりませんが、ASP.Netページ(aspx)をレンダリングする方法です。Global.asaxからasp.net WebFormページをレンダリングするには? 1つの理由か別の理由で

これは、これまでの私の進歩である:

//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> 

をし、それは私が間違って何をやっているの背後にあるほとんどのコード(関係ない単なる空の関数)

を持っていますここに?

答えて

1

私が最初に考えたのは、隠しファイルをPage.FrameworkInitializeと呼んでいないということです。このシナリオで実際にあなたのために何かをしているかどうかはわかりません。

Page.ProcessRequestは、提供されたHttpContextに直接レンダリングするとも考えられます。 ReflectorのProcessRequestMainを参照してください。レンダリング中にthis.RenderControl(this.CreateHtmlTextWriter(this.Response.Output))が呼び出されます。

リクエストとレスポンスのオブジェクトがどこから得られるかはわかりません。 senderパラメータとして送信されたHttpApplicationを確認しましたか?正しいオブジェクトを使用していると確信していますか?

+0

はい、彼らは正しいリクエストとレスポンスのオブジェクトであるのGlobal.asaxクラスに組み込まれているように、彼らは – Earlz

5

Global.asaxは赤いニシンです。 ASP.NETが正常にあなたが要求したページのレンダリングされます。

test1 o=new test1(); 

test1test1.aspxページのコードビハインドクラスです。それはあなたが望むものではありません、参照してください?あなたが見たいと思っているものはすべて、test1.aspxファイルから来ます。何をする必要がResponse.Outputにtest1.aspxをレンダリングするためにASP.NETを設定してください:

using (var o = (Page) BuildManager.CreateInstanceFromVirtualPath("/test1.aspx", typeof (Page))) { 
    o.ProcessRequest(Context); 
} 
関連する問題