C# textbox触发TextChanged事件两次,回发两次,第一次回发状态中止

C# textbox触发TextChanged事件两次,回发两次,第一次回发状态中止,c#,asp.net,postback,textchanged,C#,Asp.net,Postback,Textchanged,我有一个文本框availableItemsFilterTextBox,用于为网格视图availableItemsGridView提供过滤数据 网格视图可用的ItemsGridView位于: UpdatePanel和UpdateMode设置为“条件”并触发 设置为TextChanged事件 和带有AutoPostBack=“true”的TabControl 但这只会阻止加载数据,因为第一次回调会加载数据,然后在未呈现的情况下中止。防止第二次回发调用LoadAvailableItems() 在L

我有一个文本框availableItemsFilterTextBox,用于为网格视图availableItemsGridView提供过滤数据


网格视图可用的ItemsGridView位于:

  • UpdatePanel和UpdateMode设置为“条件”并触发 设置为TextChanged事件
  • 和带有AutoPostBack=“true”的TabControl

    但这只会阻止加载数据,因为第一次回调会加载数据,然后在未呈现的情况下中止。防止第二次回发调用LoadAvailableItems()

    在LoadAvailableItems()内部,我正在使用OracleAdapter,必须调用输出参数为
    OracleDbType.RefCursor
    为了使排序和分页可用,我必须从dataset获取dataview。然后将其绑定到availableItemsGridView。据我所知,SqlDataSource不兼容,无法与Oracle配合使用

     DataView dataview = availableItemsDataSet.Tables[0].DefaultView;
                //dataview is required only to specify sorting
                dataview.Sort = sortExpression + sortDirection;
    
                availableItemsGridView.DataSource = dataview; 
                availableItemsGridView.PageIndex = NewPageIndex;
    
                availableItemsGridView.DataBind();
    
    请帮我解决这个脑筋急转弯。
    我无法理解为什么我会收到TextCahnged event twise,以及第一个回发请求是如何以及在何处被中止的?

    我建议使用Web方法并使用jQuery调用它们。您将看到更好的性能,并避免双重回发

    下面是一个很好的例子:

    我的进一步研究表明,在Firefox和IE中,文本框的双重回发是一种行为,只有一次回发。。。
    <asp:AsyncPostBackTrigger ControlID="availableItemsFilterTextBox" EventName="TextChanged" />
    
                    string vsFilter = (string)Session[AvailableItemsFilterTypes_Text];
                if (vsFilter != filter)
                {
                    Session.Add(AvailableItemsFilterTypes_Text, filter);
    
                    this.LoadAvailableItems();
                }
    
     DataView dataview = availableItemsDataSet.Tables[0].DefaultView;
                //dataview is required only to specify sorting
                dataview.Sort = sortExpression + sortDirection;
    
                availableItemsGridView.DataSource = dataview; 
                availableItemsGridView.PageIndex = NewPageIndex;
    
                availableItemsGridView.DataBind();