2011-12-19 17 views
6

Yardım almak için her yerde arama yaptım ve beni rahatsız etmeye başladı.ASPX Sayfalarını özel httpHandlers öğelerini değerlendirme

Araçlar ve bunların ilgili bilgilerini depolayan bir Dahili Araç Web Sitesi oluşturuyorum.

Görüşüm, bir web adresine sahip olmaktır (Http: //website.local/Tool/ID) Kimlik, gösterilmesi istenen Aracın kimliği. Gerekçem daha sonra çeşitli işlevlere izin vermek için URL'nin işlevselliğini artırabilir.

Şu anda 'Araç' Klasöründe bulunan herhangi bir URL'yi engelleyen özel bir httpHandler kullanıyorum.

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

Temelde ben 'Aracı' klasörünün içindeki benim müşteri httphandler Tepki içine Render istiyorum (Aracı \ tool.aspx) bir sayfa var.

Ancak bu yöntem işe yaramıyor (Bu bir hata göstermiyor, hiçbir şey göstermiyor) Ham dosyayı yanıt olarak yazabilirim ama açıkçası benim amacım değil.

sayesinde

Oliver

+3

kullanmakta düşündünüz mü ASP.NET MVC? Yapmaya çalıştığınız şey için iyi bir uyum gibi görünüyor. – tvanfosson

+0

. Net 3.5 için olması gereken iyi bir örnek var mı? –

+0

MVC2, .NET 3.5 ile çalışır. Http://nerddinner.codeplex.com/ örnek, kanonik örnektir. Esas olarak, belirli bir takım kimliğini alan bir Index eylemine sahip standart bir TooController istersiniz. İşlevsellik genişletmek için ek eylemler veya parametreler (veya her ikisi) ekleyebilirsiniz. – tvanfosson

cevap

5

hala size ıhttphandler türetilmiş sınıfta aşağıdakileri yapmanız deneyebilirsiniz özel bir yaklaşım kullanmak isterseniz:

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