wly*_*les 2 c# asp.net autopostback
在开始之前,我已经看到了一个关于一个非常相似的主题(以及这一个和这一个)的问题,其中没有一个完全回答我的问题.我已经理解了这些问题/答案中提出的概念,但我还有更多问题.
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"
Run Code Online (Sandbox Code Playgroud)
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) { }
Run Code Online (Sandbox Code Playgroud)
现在,假设你改变ddlFoo对3,然后ddlBar到b.然后,单击btnQux.Response.Write单击后,您将获得以下输出:
ddlBar changed to b. ddlFoo changed to 3.
Run Code Online (Sandbox Code Playgroud)
为什么会这样?OnSelectedIndexChanged一旦发生回发,这些方法是否被放入堆栈中?
B)当我使用这种方法并AutoPostBack="false"为我的大多数控件设置时,为什么我的网页加载速度要快得多?具体来说,我为a
CheckBox,a DropDownList和a做TextBox了这个GridView,它检索了大约1200行和27列数据,并且在VS2008调试模式下花了10秒而不是之前的310s.为什么加载/刷新时间会快得多?
编辑:我今天早些时候发布了代码,old(AutoPostBack="true")和new(AutoPostBack="false")版本的加载时间没有显着差异.我认为也许调试器正在做一些额外的事情,这导致了加载时间的大幅增加.一个更好的方法来改写问题B)可能是这样的:调试器一直在做什么来导致加载时间的大幅度增加?
警告:我不是ASP.NET专家......如果这是垃圾,我会删除它:)
A)我相信你会看到所有控件的新值,无论何时回发结束,包括所有更改事件,就像你描述的那样.毕竟,这些值已经发生了变化 - AutoPostBack只会影响时间(当然,回发是否完全发生).
B)AutoPostBack = True在所有控件上提供的HTML中有更多的Javascript ,但还不足以产生巨大的差异.正如您的编辑中所指出的那样,看起来这仍然是一个短暂的问题 - 如果没有更多的诊断,我们无法真正解释瞬态问题.