2011-12-19 5 views
6

私はどこからでもヘルプを探して、それを悩まし始めています。カスタムhttpHandlerからASPXページを評価する

ツールとその関連情報を保存する内部ツールウェブサイトを作成しています。

私のビジョンはWebアドレス(Http://website.local/Tool/ID) ここで、IDは表示したいツールのIDです。 私の推論では、URLの機能を拡張して、他のさまざまな機能を使用できるようにすることができます。

現在、私は 'ツール'フォルダにあるURLをインターセプトするカスタムhttpHandlerを使用しています。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace Tooling_Website.Tool 
{ 
    public class ToolHandler : IHttpHandler 
    { 
     public bool IsReusable 
     { 
      get { return false; } 
     } 


     public void ProcessRequest(HttpContext context) 
     { 
      //The URL that would hit this handler is: http://{website}/Tool/{AN ID eg: http://{website}/Tool/PDINJ000500} 
      //The idea is that what would be the page name is now the ID of the tool. 
      //tool is an ASPX Page. 
      tool tl = new tool(); 
      System.Web.UI.HtmlTextWriter htr = new System.Web.UI.HtmlTextWriter(context.Response.Output); 
      tl.RenderControl(htr); 
      htr.Close(); 
     } 
    } 
} 

基本的に私は私が私の顧客HTTPHandlerのは、レスポンスにレンダリングしたい「ツール」フォルダ(ツールの\ tool.aspx)内のページを持っています。

しかし、この方法はうまくいかない(失敗しない、何も表示しない)私は生のファイルを応答に書くことができるが、私の目標ではないことは明らかである。

おかげで、

オリバー

+3

あなたが使用して考えがありますASP.NET MVC?あなたがやろうとしていることに適しているようです。 – tvanfosson

+0

.net 3.5用にする必要があります。良い例がありますか? –

+0

MVC2は.NET 3.5で動作します。 http://nerddinner.codeplex.com/の例は標準的な例です。基本的には、特定のツールIDを使用するIndexアクションを備えた標準TooControllerが必要です。追加のアクションまたはパラメータ(またはその両方)を追加して機能を拡張できます。 – tvanfosson

答えて

5

あなたはまだあなたのカスタム・アプローチを使用する場合は、あなたのIHTTPハンドラ派生クラスで次の操作を実行しようとすることができます:

 
     public void ProcessRequest(HttpContext context) 
     { 
      //NOTE: here you should implement your custom mapping 
      string yourAspxFile = "~/Default.aspx"; 
      //Get compiled type by path 
      Type type = BuildManager.GetCompiledType(yourAspxFile); 
      //create instance of the page 
      Page page = (Page) Activator.CreateInstance(type); 
      //process request 
      page.ProcessRequest(context); 
     } 
関連する問題