就像萊納斯說的,「閱讀f ***源代碼」。 所以我反編譯的代碼,並得到這個:
爲1
// ASP.default_aspx
private void __Renderform1(HtmlTextWriter __w, Control parameterContainer)
{
__w.Write("\r\n ");
parameterContainer.Controls[0].RenderControl(__w);
__w.Write("\r\n start\r\n <h3>Page type:");
parameterContainer.Controls[1].RenderControl(__w);
__w.Write("</h3>\r\n ");
this._message.InnerText = base.GetType().ToString();
__w.Write("\r\n end\r\n ");
}
爲2
// ASP.default_aspx
private void __Renderform1(HtmlTextWriter __w, Control parameterContainer)
{
__w.Write("\r\n ");
parameterContainer.Controls[0].RenderControl(__w);
__w.Write("\r\n start\r\n ");
this._message.InnerText = base.GetType().ToString();
__w.Write("\r\n <h3>Page type:");
parameterContainer.Controls[1].RenderControl(__w); // Here the change has no effect.
__w.Write("</h3>\r\n end\r\n ");
}
因此,有是2關鍵點:
ASP.NET分析器呈現從上到下的整個頁面 時尚,從字面上看是。
這個混淆來自於我對桌面應用程序的經驗。
對於桌面應用程序,它就像:代碼 - > Memeory - > UI
對於ASP.NET應用程序,它就像:代碼 - >內存 - >輸出繼電器Buffer-> UI
在代碼片段2的變化發生在代碼 - >內存步驟中,但它沒有機會向輸出緩衝區進行提示,因此在最終用戶界面上沒有任何變化。
因此,根本原因是我們有一個額外的階段,才能到達ASP.NET應用程序的UI。
我希望我明確自己。
其原因是在代碼段2中,span是ALREADY呈現的,這就是爲什麼對該控件所做的任何更改只會在下一次回發中生效,而代碼段1中的更改反之亦然。 –