2011-12-19 8 views
6

Tôi tìm kiếm ở khắp mọi nơi để được trợ giúp và bắt đầu làm phiền tôi.Đánh giá các trang ASPX từ httpHandlers tùy chỉnh

Tôi đang tạo Trang web công cụ nội bộ lưu trữ Công cụ và thông tin liên quan của họ.

Tầm nhìn của tôi là có địa chỉ web (Http: //website.local/Tool/ID) ID đâu là ID của Công cụ mà chúng tôi muốn hiển thị. Lý do của tôi là sau đó tôi có thể mở rộng chức năng của URL để cho phép các chức năng khác nhau.

Hiện tại tôi sử dụng httpHandler tùy chỉnh chặn bất kỳ URL nào nằm trong thư mục 'Công cụ'.

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

Về cơ bản tôi có một trang bên trong thư mục 'Công cụ' (Công cụ \ tool.aspx) mà tôi muốn khách hàng của tôi HttpHandler để Render vào đáp ứng.

Nhưng phương pháp này không hoạt động (Nó không thất bại, chỉ không hiển thị bất cứ điều gì) Tôi có thể viết các tập tin thô để phản ứng nhưng rõ ràng đó không phải là mục tiêu của tôi.

Cảm ơn,

Oliver

+3

Bạn đã xem là sử dụng ASP.NET MVC? Có vẻ như nó sẽ phù hợp với những gì bạn đang cố gắng làm. – tvanfosson

+0

Cần phải có .net 3.5, có một ví dụ tốt? –

+0

MVC2 hoạt động với .NET 3.5. Ví dụ http://nerddinner.codeplex.com/ là ví dụ kinh điển. Về cơ bản, bạn muốn có một TooController chuẩn với một hành động Index có một id công cụ cụ thể. Bạn có thể thêm các hành động hoặc tham số bổ sung (hoặc cả hai) để mở rộng chức năng. – tvanfosson

Trả lời

5

Nếu bạn vẫn muốn sử dụng phương pháp tùy chỉnh của bạn, bạn có thể thử làm như sau trong IHttpHandler lớp có nguồn gốc của mình:

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