【发布时间】:2013-07-31 19:06:38
【问题描述】:
在我开始之前,我已经看到了this question about a very similar topic(以及this one 和this one),它们都没有完全回答我的问题。我已经了解这些问题/答案中提出的概念,但我还有更多问题。
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" 时,我的网页加载得更快?具体而言,我对
CheckBox、DropDownList 和GridView 中的TextBox 执行了此操作,它们检索了约1200 行和27 列数据,并且在VS2008 调试模式下花费了10 秒,而之前是310 秒。为什么加载/刷新时间会这么快?
编辑:我今天下午早些时候发布了代码,旧 (AutoPostBack="true") 和新 (AutoPostBack="false") 版本的加载时间没有显着差异。我认为也许调试器正在做一些额外的事情,这导致加载时间大幅增加。改写问题 B) 的更好方法可能是这样:调试器一直在做什么来导致加载时间如此大的跳跃?
【问题讨论】:
标签: c# asp.net autopostback