1)我发现了两篇文章,每篇文章对两种类型的回发事件的分类都略有不同:
一位资源说两种类型的回发事件是Changed事件(其中控件实现 IPostbackDataHandler ),当数据在回发之间更改时触发,然后Raised事件(其中控件实现 IPostbackEventHandler ),由服务器控件出于控件认为合适的任何原因引发
另一篇文章说这两种类型是即时响应事件和Change事件。根据这篇文章,立即响应事件是真正触发回发的事件
a) 哪种分类是正确的?
b) 如果第二篇文章是正确的,那么如果 TextBox 控件的 AutoPostBack=”true”,那么 TextChanged 是否也应该被视为立即响应事件?
2)当由于某些用户操作而将页面提交回服务器时,然后在事件处理阶段,ASP.NET 引发自上次回发以来数据发生更改的所有控件的事件。实际触发回发的事件(例如 Click 事件)最后引发
a) 但是如果用户在 GridView 中选择一行导致回发怎么办?当 GridView 由于行选择而导致回发时,与更简单的控件(如 TextBox 或 Button )不同,该回发会导致 GridView 在事件处理阶段( SelectedIndexChaning 和 SelectedIndexChanged )触发不是一个,而是多个服务器端事件。
ASP.NET 认为这些 GridView 事件中的哪一个是导致回发的事件?
谢谢
即使 Autopostback 属性为 false,SelectedIndexChanged 事件(在列表框中)和 TextChanged 事件(在文本框中)也会在回发时触发。
尝试将其放在表格上:
<asp:ListBox runat="server" ID="test"
onselectedindexchanged="test_SelectedIndexChanged">
<asp:ListItem >number1</asp:ListItem>
<asp:ListItem >number2</asp:ListItem>
</asp:ListBox>
<asp:TextBox runat="server" ID="text" ontextchanged="text_TextChanged" />
<asp:Button runat="server" Text="Click Me" />
这在后面的代码中:
protected void test_SelectedIndexChanged(object sender, EventArgs e)
{
Response.Write("SelectedIndexChanged");
}
protected void text_TextChanged(object sender, EventArgs e)
{
Response.Write("TextChanged");
}
然后运行它,更改所选项目,键入一些文本,然后单击按钮 - 两个事件都会触发。您可以使用 Reflector 查看事件的顺序。对于文本框,RaisePostDataChangedEvent 方法是:
protected virtual void RaisePostDataChangedEvent()
{
if (this.AutoPostBack && !this.Page.IsPostBackEventControlRegistered)
{
this.Page.AutoPostBackControl = this;
if (this.CausesValidation)
{
this.Page.Validate(this.ValidationGroup);
}
}
this.OnTextChanged(EventArgs.Empty);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)