我在 aspx 页面中分别放置了一个列表框和一个文本框,其中包含 Selected Index Changed 和 Text Changed 事件。现在,如果我在文本框中写了一些东西,然后在没有点击其他地方的情况下在列表框中选择一个值,那么首先调用文本框的文本更改事件,然后调用列表框的选定索引更改事件。之后再次调用文本框的Text Change 事件。任何机构都可以了解为什么会发生这种情况吗?
下面是标记:
<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ListBox_IndexChanged">
<asp:ListItem Text="abc" />
<asp:ListItem Text="def" />
</asp:ListBox>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" OnTextChanged="Text_Changed" />
代码隐藏:
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void ListBox_IndexChanged(object sender, EventArgs e)
{
}
protected void Text_Changed(object sender, EventArgs e)
{
}
}
}
最佳答案
问题是 AutoPostBack
通过将 JavaScript 事件附加到您的控件来工作。每个浏览器处理 JavaScript 的方式略有不同,因此无法真正保证顺序。
例如,当我在 Google Chrome 中尝试您的代码时,会发生以下事件序列:
- 请求发送到服务器
- ListBox_IndexChanged 事件被调用
- 调用 Text_Changed 事件
- 回复给客户
但是,在 Internet Explorer 8 中,我注意到以下顺序:
- 请求发送到服务器
- 调用 Text_Changed 事件
- 回复给客户
- 另一个请求发送到服务器
- ListBox_IndexChanged 事件被调用
- 调用 Text_Changed 事件
- 第二次响应返回给客户
我想这不是 ASP.NET 的错误,而是不同浏览器的 JavaScript 实现不同所致。
如果您需要依赖特定的事件序列,AutoPostBack
不会削减它。根据您的情况,我可能会考虑使用像 jQuery 这样的跨浏览器兼容库来实现我自己的 JavaScript 事件。 .您可以使用 __doPostBack()
函数以编程方式回调服务器。
关于c# - ASP.Net:文本框的文本更改事件的调用序列问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4862990/