c# - ASP.Net:文本框的文本更改事件的调用序列问题

标签 c# .net asp.net textbox textchanged

我在 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 中尝试您的代码时,会发生以下事件序列:

  1. 请求发送到服务器
    1. ListBox_IndexChanged 事件被调用
    2. 调用 Text_Changed 事件
  2. 回复给客户

但是,在 Internet Explorer 8 中,我注意到以下顺序:

  1. 请求发送到服务器
    1. 调用 Text_Changed 事件
  2. 回复给客户
  3. 另一个请求发送到服务器
    1. ListBox_IndexChanged 事件被调用
    2. 调用 Text_Changed 事件
  4. 第二次响应返回给客户

我想这不是 ASP.NET 的错误,而是不同浏览器的 JavaScript 实现不同所致。

如果您需要依赖特定的事件序列,AutoPostBack 不会削减它。根据您的情况,我可能会考虑使用像 jQuery 这样的跨浏览器兼容库来实现我自己的 JavaScript 事件。 .您可以使用 __doPostBack() 函数以编程方式回调服务器。

关于c# - ASP.Net:文本框的文本更改事件的调用序列问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4862990/

相关文章:

c# - 给定一个点到另外两个点的距离,如何找到一个点?

c# - F#的静态绑定(bind)约束是如何实现的?

Lego Mindstorm NXT 的 C# 库

c# - Stackpanel 中的自动调整大小和居中文本 block

c# - 如何在 ASP.NET CORE 中签署 XML SAML 断言

jQuery AJAX post 收到 405 错误(不允许 HTTP 动词 POST)

javascript - ASPX 页面中引用的文件不会导致调用 Application_BeginRequest

c# - 无法使我的服务调用 ServiceKnownType 帮助程序方法

c# - 将默认选项添加到 SelectList - MVC3 C#

c# - C#中如何调用基于XML-RPC规范的API?