在我开始之前,我已经看到了这个关于一个非常相似的主题的问题(以及这个和这个),没有一个完全回答了我的问题。我已经了解这些问题/答案中提出的概念,但我还有更多问题。
A)如果您有多个控件,AutoPostBack="false"
并且在回发之前更改了其中的一些,会发生什么情况?以下面的简短示例为例(假设页面所需的所有其他内容都正确且简单地编写;例如,Page_Load
):
默认.aspx:
<asp:DropDownList ID="ddlFoo" runat="server"
OnSelectedIndexChanged="ddlFoo_Changed" AutoPostBack="false" >
<asp:ListItem Text="a" />
<asp:ListItem Text="b" />
<asp:ListItem Text="c" />
</asp:DropDownList>
<asp:DropDownList ID="ddlBar" runat="server"
OnSelectedIndexChanged="ddlBar_Changed" AutoPostBack="false" >
<asp:ListItem Text="1" />
<asp:ListItem Text="2" />
<asp:ListItem Text="3" />
</asp:DropDownList>
<asp:Button ID="btnQux" runat="sever" Text="Click for PostBack" OnClick="btnQux_Click"
默认.aspx.cs:
protected void ddlFoo_Changed(object sender, EventArgs e)
{
Response.Write("ddlFoo changed to " + ddlFoo.Text + ". ");
}
protected void ddlBar_Changed(object sender, EventArgs e)
{
Response.Write("ddlBar changed to " + ddlBar.Text + ". ");
}
protected void btnQux_Changed(object sender, EventArgs e) { }
现在,假设您更改ddlFoo
为3
,然后更改ddlBar
为b
。然后,您单击btnQux
。Response.Write
单击后,您将获得以下输出:
ddlBar changed to b. ddlFoo changed to 3.
为什么会这样?一旦回发发生,这些OnSelectedIndexChanged
方法是否会被放入堆栈中以调用?
B)AutoPostBack="false"
为什么当我使用这种方法并为我的大多数控件设置时,我的网页加载速度更快?具体来说,我对 a
CheckBox
、 aDropDownList
和 a TextBox
in a 执行了此操作GridView
,它检索了大约 1200 行和 27 列数据,并且在 VS2008 调试模式下花费了 10 秒,而之前是 310 秒。为什么加载/刷新时间会这么快?
编辑:AutoPostBack="true"
我今天下午早些时候发布了代码,旧 ( ) 和新 ( AutoPostBack="false"
) 版本的加载时间没有显着差异。我认为也许调试器正在做一些额外的事情,这导致加载时间大幅增加。改写问题B)的更好方法可能是这样:调试器可能一直在做什么来导致加载时间出现如此大的跳跃?