2012-06-13 4 views
3

HttpContext.Current.ApplicationInstance.CompleteRequest, кажется, ничего не делает. Что мне не хватает?ASP.NET ApplicationInstance.CompleteRequest не работает?

Например, несмотря на то, что в каждом интересном событии вызывается CompleteRequest, все приведенные ниже события все еще работают на простой тестовой странице.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 

namespace LifeCycle 
{ 
    public partial class _Default_NoMasterPage : System.Web.UI.Page 
    { 
     private int count = 0; 

     protected override void OnInit(EventArgs e) 
     { 
      nextLabel("InitBeforeBase"); 
      base.OnInit(e); 
      HttpContext.Current.ApplicationInstance.CompleteRequest(); 
      nextLabel("Init"); 
     } 

     protected override void OnInitComplete(EventArgs e) 
     { 
      nextLabel("InitCompleteBeforeBase"); 
      base.OnInitComplete(e); 
      HttpContext.Current.ApplicationInstance.CompleteRequest(); 
      nextLabel("InitComplete"); 
     } 

     protected override void OnLoad(EventArgs e) 
     { 
      nextLabel("OnLoadBeforeBase"); 
      base.OnLoad(e); 
      HttpContext.Current.ApplicationInstance.CompleteRequest(); 
      nextLabel("OnLoad"); 
     } 

     protected override void OnLoadComplete(EventArgs e) 
     { 
      nextLabel("OnLoadCompleteBeforeBase"); 
      base.OnLoadComplete(e); 
      HttpContext.Current.ApplicationInstance.CompleteRequest(); 
      nextLabel("OnLoadComplete"); 
     } 

     protected override void OnPreInit(EventArgs e) 
     { 
      // can't add a control to the page during OnPreInit as the other page control doesn't exist yet. 
      base.OnPreInit(e); 
     } 

     private void nextLabel(string eventName) 
     { 
      string lbl = "" + ++count + " " + eventName + " at " + DateTime.Now.ToLongTimeString() + ""; 
      System.Web.UI.HtmlControls.HtmlGenericControl c = new HtmlGenericControl("div"); 
      c.InnerText = lbl; 
      Page.Controls.Add(c); 
     } 
    } 
} 

ответ

7

Так получилось, что у меня возникло фундаментальное недоразумение по поводу полного соответствия. CompleteRequest пропускает остальную часть цепочки конвейера IIS HTTP, но жизненный цикл события обработчика страницы ASP.NET завершается, потому что это всего лишь одна часть цепи HTTP-конвейера, и ничто не сказало, что эта часть останавливается.

+0

так ...... как вы в конечном итоге отменяли выполнение жизненного цикла? – Nuzzolilo

+0

Поверьте, я прибегал к Response.End() –

Смежные вопросы