2011-12-19 7 views
6

Ho una ricerca in tutto il mondo per aiuto e il suo inizio a infastidirmi.Valutazione pagine ASPX da httpHandlers personalizzati

Sto creando un sito Web di utensili interni che memorizza gli strumenti e le relative informazioni.

La mia visione è di avere un indirizzo web (Http: //website.local/Tool/ID) Dove ID è l'ID dello strumento che vogliamo visualizzare. Il mio ragionamento è quindi che posso estendere la funzionalità dell'URL per consentire varie altre funzioni.

Attualmente utilizzo un httpHandler personalizzato che intercetta qualsiasi URL presente nella cartella "Strumento".

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

Fondamentalmente ho una pagina all'interno della cartella del 'Tool' (Strumento \ tool.aspx), che voglio che il mio cliente HttpHandler di rendere nella risposta.

Ma questo metodo non funziona (non fallisce, solo non mostra nulla) Posso scrivere il file raw alla risposta ma ovviamente questo non è il mio obiettivo.

Grazie,

Oliver

+3

Hai pensato di usare ASP.NET MVC? Sembra che sarebbe una buona misura per quello che stai cercando di fare. – tvanfosson

+0

Ha bisogno di essere per. NET 3.5, ha un buon esempio? –

+0

MVC2 funziona con .NET 3.5. L'esempio http://nerddinner.codeplex.com/ è l'esempio canonico. In sostanza, si vorrebbe un TooController standard con un'azione Index che abbia uno specifico ID strumento. È possibile aggiungere ulteriori azioni o parametri (o entrambi) per estendere la funzionalità. – tvanfosson

risposta

5

Se si desidera continuare a utilizzare il vostro approccio personalizzato, si può provare a fare quanto segue nel IHttpHandler classe derivata:

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