在开始之前,我已经看过this question about a very similar topic(以及this onethis 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"时,网页加载速度更快?具体来说,我是针对CheckBoxDropDownListTextBox中的GridView进行此操作的,它们在VS2008调试模式下检索了约1200行和27列数据,并花费了10s而不是之前的310s。为什么加载/刷新时间会这么快?

编辑:我今天下午早些时候发布了代码,并且旧版本(AutoPostBack="true")和新版本(AutoPostBack="false")的加载时间之间没有显着差异。我认为调试器可能正在做一些额外的事情,从而导致加载时间大大增加。改写问题B)的更好方法可能是:调试器可能在做什么,从而导致加载时间大幅增加?

最佳答案

警告:我不是ASP.NET专家...如果发现这是垃圾,我将其删除:)

答:我相信您会在回发结束时看到所有控件的新值,包括所有更改事件,正如您所描述的那样。毕竟,这些值已更改-AutoPostBack仅影响时间(当然,也完全不影响回发)。

B)在所有控件上,随AutoPostBack = True一起提供的HTML中的JavaScript都更多,但不足以带来巨大的改变。正如您在编辑中指出的,无论如何,这似乎是一个暂时性问题-如果没有更多诊断程序,我们就无法真正解释暂时性问题。

09-03 23:12