2009-01-25 11 views
6

yılında programlama yoluyla System.Web.UI.Page oluşturuluyor. bunun gibiSizi URL içeriğine göre özel sayfalar oluşturmak için ASP.NET (3.5) "Yönlendirme Modülü" işlevselliği kullanmaya çalışıyorum ıhttphandler

Çeşitli makaleler,: web sunucusunda mevcut sayfalara dalına ASP.NET Yönlendirme nasıl kullanılacağını açıklamak http://blogs.msdn.com/mikeormond/archive/2008/05/14/using-asp-net-routing-independent-of-mvc.aspx. Ben yapmak istiyorum ne

kodunu kullanarak on-the-fly sayfası oluşturmak olduğunu.

Benim ilk girişimi şöyle görünür:

public class SimpleRouteHandler : IRouteHandler 
{ 

    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     string pageName = requestContext.RouteData.GetRequiredString("PageName"); 

     Page myPage = new Page(); 
     myPage.Response.Write("hello " + pageName); 
     return myPage; 

    } 

} 

Ama bu belirten bir HttpException atar "Yanıt bu bağlamda kullanılamaz." Response.Write ifadesinde.

Nasıl devam edeceğiniz konusunda herhangi bir fikir var mı?

GÜNCELLEME: Sonuçta, IHttpModule'e dayalı bir yaklaşımla gittim, ki bu oldukça kolay oldu. Bunun yerine doğrudan yanıt yazmaya çalışmakla

cevap

1

, sadece sayfasına denetimler eklemek isteyebilirsiniz. Sayfa yepyeni olduğundan ve hiç işaretlemediğinden, doğru şekilde işlenebilmesi için tüm HTML öğelerini yasal HTML haline getirmek zorunda kalabilirsiniz. Bunu hiç denemedim, işe yarayacak mı bilmiyorum.

Page myPage = new Page(); 
page.Controls.Add(new LiteralControl("hello " + pageName)); 
return myPage; 

Bunun için gerekli olan HTML, HEAD ve BODY etiketlerine sahip olacak. Kontrolleri ekleyebildiğiniz ve bu sayfayı örneklendirmek için BuildManager'ı örnekte olduğu gibi kullanabileceğiniz iskelet işaretlemesi olan bir taban sayfası oluşturmak daha iyi olabilir.

1

koyun RequestContext Response.Write önce requestContext.Response.Write

8

böylece bir IRouteHandler gelen tepki yazamıyor - bu yol çok erken istek yaşam döngüsü sırasında bulunuyor. Yalnızca, Page'un anlamı olan IHttpHandler içinden yanıt yazmalısınız.

olarak diğer örneklerde gösterilmiştir, tüm gerekli içeriğe sahip bir yere bir sayfa örneği almak gerekecek.

Page p = (Page)BuildManager.CreateInstanceFromVirtualPath("~/MyPage.aspx"); 

Yoksa sıfırdan bir hesap oluşturabilirsiniz: Burada

varolan sayfayı yüklemeden nasıl

Page p = new Page(); 
p.Controls.Add(new LiteralControl(
    @"<html> 
     <body> 
      <div> 
       This is HTML! 
      </div> 
     </body> 
     </html>")); 
+0

Sadece 'BuildManager.CreateInstanceFromVirtualPath' önerdiğiniz için teşekkür etmek istiyorum. Üzerinde çalıştığım bir konuda bana çok yardımcı oldu. –

+0

Sayfa (p = Sayfa) BuildManager.CreateInstanceFromVirtualPath ("~/MyPage.aspx" typeof (sayfa)); –

İlgili konular