想了解一下.ASP.NET页面执行的过程.看了两本ASP.NET的书.两本书上写的不一样.现在很模糊.谁能解释一下给我听听呀.

解决方案 »

  1.   

    请求一个页面:
    (1)IIS调用编译好的dll,调用OnLoad等事件,生成数据。
    (2)根据aspx的设置及数据,生成html。
    (3)传递给客户端浏览器。
    回传:
    (1)将要回传数据传递给IIS.
    (2)后台处理数据。
    (3)处理后数据与aspx结合,生成html。
    (4)传递给客户端浏览器。
      

  2.   

    我在一本书上看见是这样写的.
    第一次请求.对代码进行编译,然后处理文件.然后执行代码.然后转化为HTML
    对吗?
      

  3.   

    Q: 第一次请求.对代码进行编译,然后处理文件.然后执行代码.然后转化为HTML
    ——————————————————————————————————————————
    A: 对。但是从技术上说几乎是“毫无意义”。对于编程最应该关心的是“执行代码”的过程内部过程,如果没有掌握点细节,等于是空的什么也没有学到。
      

  4.   

    算了,我大致的说一下:首先是IIS接收到请求,让后把它发给ASP.NET。
    ASP.NET干的第一件事情是创建HttpContext对象。
    然后,HttpApplication开始接管。
    首先是触发BeginRequest事件。
    然后身份验证
    再然后授权
    再然后创建State,也就是Session。
    然后是缓存等策略。
    然后执行IHttpHandler,一般是Page。
    那么现在控制权交给了Page
    如果aspx文件还没有被编译,那么就会先编译成一个Page类。
    Page先触发PreInit事件
    然后应用Themes
    然后还原所有控件的ViewState,触发Init事件,触发所有控件的Init事件。
    然后触发InitComplete事件。
    然后触发PreLoad事件。
    然后触发Load事件,触发所有控件的Load事件。
    然后是LoadComplete
    然后是PreRender,触发所有控件的PreRender事件。
    再就是PreRenderComplete
    然后开始Render HTML代码
    最后是Unload,触发所有控件的Unload事件。
    然后Page的事情就干完了
    交还给HttpApplication。
    HttpApplication触发的最后一个事件是EndRequest
    这个时候ASP.NET的工作就干完了
    工作交还给IIS。
      

  5.   

    前面够具体了,我补充一下代码中各个一定发生的事件的出现顺序:PreInit   
    Init                ---------->这是2003里加一般事件委托的时候
    InitComplete
    PreLoad
    Load                 --------->这就是执行Page_Load的时候了
    LoadComplete
    PreRender
    PreRenderComplete
    SaveState            ---------->处理ViewState的时候
    SaveStateComplete
    Render               ---------->呈现页面
     
      

  6.   

    Q: 处理文件.和执行代码.有什么不同?
    ——————————————————————————————————————————
    A: 处理文件估计是说把dll保存在磁盘系统,例如windows的temp目录中,以及必要的时候查询这个目录去装入特定的dll。你从Ivony() 的之中可以看到,通常都不用去特意谈论编译和保存dll、装入dll的细节。另外“然后转化为HTML”本来就是“执行代码”的其中一个步骤。
      

  7.   

    PreInit   
    Init                ---------->这是2003里加一般事件委托的时候
    InitComplete
    PreLoad
    Load                 --------->这就是执行Page_Load的时候了
    LoadComplete
    PreRender
    PreRenderComplete
    SaveState            ---------->处理ViewState的时候
    SaveStateComplete
    Render               ---------->呈现页面这些都算执行代码的过程吧.
      

  8.   

    1、asp.net页面的处理步骤:
    if (this.MaintainScrollPositionOnPostBack)
    {
        this.LoadScrollPosition();
    }
    this.PerformPreInit();
    this.InitRecursive(null);
    this.OnInitComplete(EventArgs.Empty);
    if (this.IsPostBack)
    {
        this.LoadAllState();
        this.ProcessPostData(this._requestValueCollection, true);
    }
    this.OnPreLoad(EventArgs.Empty);
    this.LoadRecursive();
    if (this.IsPostBack)
    {
        this.ProcessPostData(this._leftoverPostData, false);
        this.RaiseChangedEvents();
        this.RaisePostBackEvent(this._requestValueCollection);
    }
    this.OnLoadComplete(EventArgs.Empty);if (this.IsPostBack && this.IsCallback)
    {
        this.PrepareCallback(callbackId);
    }
    else if (!this.IsCrossPagePostBack)
    {
        this.PreRenderRecursiveInternal();
    }
    this.PerformPreRenderComplete();                    
    this.SaveAllState();
    this.OnSaveStateComplete(EventArgs.Empty);
    if (this.MaintainScrollPositionOnPostBack && (this._form == null))
    {
          throw new HttpException(SR.GetString("MaintainScrollPositionSetWithNoServerForm"));
    }
    if (webPart != null)
    {
          this.ExportWebPart(webPart);
    }
    else
    {
          this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));
    }上面的步骤仅适用于正常请求和回发,IsCrossPagePostBack和IsCallback的具体情况,请看 ProcessRequestMain方法。2、一个请求的处理步骤:
    1. BeginRequest
    2. AuthenticateRequest
    3. PostAuthenticateRequest
    4. AuthorizeRequest
    5. PostAuthorizeRequest
    6. ResolveRequestCache
    7. PostResolveRequestCache
    8. PostMapRequestHandler
    9. AcquireRequestState
    10. PostAcquireRequestState
    11. PreRequestHandlerExecute
    12. At this stage, the selected handler executes the current request. The most familiar handler is the
    Page handler.
    13. PostRequestHandlerExecute
    14. ReleaseRequestState
    15. PostReleaseRequestState
    16. UpdateRequestCache
    17. PostUpdateRequestCache
    18. EndRequest其中第12步就是上面页面的处理。
      

  9.   

    PreInit   
    Init                ---------->这是2003里加一般事件委托的时候
    InitComplete
    PreLoad
    Load                 --------->这就是执行Page_Load的时候了
    LoadComplete
    PreRender
    PreRenderComplete
    SaveState            ---------->处理ViewState的时候
    SaveStateComplete
    Render               ---------->呈现页面这些都算执行代码的过程吧.是吧??