System.web.ui.page的替代方案

时间:2009-02-25 15:26:13

标签: asp.net page-lifecycle

我有一个ASP.Net应用程序,我注意到通过使用分析器,在我的页面运行之前发生了大量的处理。在我的应用程序中,我们没有使用viewstate,asp.Net会话,我们可能不需要使用asp.net页面生命周期所带来的大部分开销。还有其他一些我可以轻易继承的课程,它会删除所有的Asp.Net内容,让我自己动手写一下这个页面吗?

我听说ASP.Net MVC可以大大减少页面加载,因为它不使用旧的asp.net生命周期,并且以不同的方式处理页面。有没有一种简单的方法,可能只需让我的网页继承其他类来利用这样的东西。如果可能的话,我想要一个适用于ASP.Net 2.0的解决方案。

3 个答案:

答案 0 :(得分:9)

我发现大多数文章都在谈论使用Page作为基类并在其上实现功能,看起来你需要创建自己的MyPage类来实现IHttpHandler

来自MSDN文章


using System.Web;

namespace HandlerExample { public class MyHttpHandler : IHttpHandler { // Override the ProcessRequest method. public void ProcessRequest(HttpContext context) { context.Response.Write("This is an HttpHandler Test.");
context.Response.Write("Your Browser:"); context.Response.Write("Type: " + context.Request.Browser.Type + ""); context.Response.Write("Version: " + context.Request.Browser.Version); }

  // Override the IsReusable property.
  public bool IsReusable
  {
     get { return true; }
  }

} }

同样,从文章:要使用此处理程序,请在Web.config文件中包含以下行。

  // Override the IsReusable property.
  public bool IsReusable
  {
     get { return true; }
  }
<configuration> <system.web> <httpHandlers> <add verb="*" path="handler.aspx" type="HandlerExample.MyHttpHandler,HandlerTest"/> </httpHandlers> </system.web> </configuration>

我将查看System.web.ui.page的源代码,并了解它为您提供的指导。我的猜测是它主要只是以正确的顺序调用asp.net页面生命周期中的不同方法。你可以通过从ProcessRequest方法调用自己的page_load来做类似的事情。这将路由到您实现MyPage的类的单独实现。

我以前从未想过会做这样的事情,这听起来不错,因为我真的不使用任何膨胀的webforms功能。 MVC可能会使整个练习徒劳无功,但看起来确实非常整洁。

我的快速示例

新基地:

页面实施:


using System.Web;
namespace HandlerExample
{
    // Replacement System.Web.UI.Page class
    public abstract class MyHttpHandler : IHttpHandler
    {
        // Override the ProcessRequest method.
        public void ProcessRequest(HttpContext context)
        {
            // Call any lifecycle methods that you feel like
            this.MyPageStart(context);
            this.MyPageEnd(context);
        }

    // Override the IsReusable property.
    public bool IsReusable
    {
        get { return true; }
    }

    // define any lifecycle methods that you feel like
    public abstract void MyPageStart(HttpContext context);
    public abstract void MyPageEnd(HttpContext context);

}

答案 1 :(得分:3)

如果您不需要所有这些“asp.net内容”,您可能希望实现自定义IHttpHandler。 Afaik,除了Page class之外,没有其他标准的IHttpHandler可以重用。

答案 2 :(得分:0)

为此,您应首先查看System.Web.UI.PageHandlerFactory类和相应的System.Web.IHttpHandlerFactory接口。

从那里你可能会看到System.Web.IHttpHandler接口和System.Web.UI.Page类。

基本上你会编写自己的IHttpHandlerFactory来生成处理页面请求的IHttpHandlers。