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

时间:2011-02-01 13:14:09

标签: c# .net asp.net textbox textchanged

我在aspx页面中分别放置了一个列表框和一个包含Selected Index Changed和Text Changed事件的文本框。现在,如果我在文本框中写入内容然后单击其他位置选择列表框中的值,则会调用文本框的第一个文本更改事件,然后调用列表框的选定索引更改事件。之后再次发送文本框的文本更改事件。任何机构都可以提供一些见解,为什么会这样?

以下是标记:

<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)
        {

        }
    }
}

2 个答案:

答案 0 :(得分:1)

问题/问题是AutoPostBack通过将JavaScript事件附加到您的控件来工作。每个浏览器处理JavaScript的方式略有不同,因此订购时没有真正的保证。

例如,当我在谷歌浏览器中尝试您的代码时,会发生以下事件序列:

  1. 请求发送到服务器
    1. 调用ListBox_IndexChanged事件
    2. 调用Text_Changed事件
  2. 回复客户
  3. 但是,在 Internet Explorer 8 中,我注意到以下顺序:

    1. 请求发送到服务器
      1. 调用Text_Changed事件
    2. 回复客户
    3. 发送给服务器的另一个请求
      1. 调用ListBox_IndexChanged事件
      2. 调用Text_Changed事件
    4. 第二回应回到客户
    5. 我认为这不是ASP.NET的错,而是跨浏览器的各种JavaScript实现。

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

答案 1 :(得分:0)

选择新项目时,列表框文本部分中的文本将替换为项目文本。这就是你得到第二个TextChanged事件的原因。