在开始之前,我已经看过this question about a very similar topic(以及this one和this one),没有一个可以完全回答我的问题。我已经理解了这些问题/答案中提出的概念,但是我还有其他问题。
A)如果您有多个使用AutoPostBack="false"
的控件,并且在回发之前更改了多个控件,会发生什么情况?以下面的简短示例(假设该页面所需的所有其他内容均正确且琐碎地编写;例如,Page_Load
):
Default.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"
Default.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
和TextBox
中的GridView
进行此操作的,它们在VS2008调试模式下检索了约1200行和27列数据,并花费了10s而不是之前的310s。为什么加载/刷新时间会这么快?编辑:我今天下午早些时候发布了代码,并且旧版本(
AutoPostBack="true"
)和新版本(AutoPostBack="false"
)的加载时间之间没有显着差异。我认为调试器可能正在做一些额外的事情,从而导致加载时间大大增加。改写问题B)的更好方法可能是:调试器可能在做什么,从而导致加载时间大幅增加? 最佳答案
警告:我不是ASP.NET专家...如果发现这是垃圾,我将其删除:)
答:我相信您会在回发结束时看到所有控件的新值,包括所有更改事件,正如您所描述的那样。毕竟,这些值已更改-AutoPostBack
仅影响时间(当然,也完全不影响回发)。
B)在所有控件上,随AutoPostBack = True
一起提供的HTML中的JavaScript都更多,但不足以带来巨大的改变。正如您在编辑中指出的,无论如何,这似乎是一个暂时性问题-如果没有更多诊断程序,我们就无法真正解释暂时性问题。