就像莱纳斯说的,“阅读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中的更改反之亦然。 –