我有一個文本框availableItemsFilterTextBox,其目的是爲網格視圖availableItemsGridView提供過濾數據。文本框火災中止
<asp:TextBox runat="server" ID="availableItemsFilterTextBox" AutoPostBack="True" OnTextChanged="availableItemsFilterTextBox_TextChanged"></asp:TextBox>
網格視圖availableItemsGridView置於內:
- 一個UpdatePanel並用的UpdateMode設置爲 「條件」 和觸發 設置爲TextChanged事件,
和TabControl的用AutoPostBack =「true」
<ajaxToolkit:TabContainer runat="server" ID="patternTabContainer" ActiveTabIndex="0" AutoPostBack="false" OnActiveTabChanged="Tabs_ActiveTabChanged"> <ajaxToolkit:TabPanel runat="server" ID="availableItemsTabPanel" meta:resourcekey="itemSelectionPanelResource"> <ContentTemplate> <asp:UpdatePanel ID="availableItemsUpdatePanel" runat="server" UpdateMode="Conditional"> <Triggers> <asp:AsyncPostBackTrigger ControlID="availableItemsFilterTextBox" EventName="TextChanged" /> </Triggers> <ContentTemplate> <asp:Panel ID="Panel1" runat="server" ScrollBars="Auto" Style="max-height: 400px; margin: 5px 5px 5px 5px;"> <asp:GridView ID="availableItemsGridView" runat="server" CssClass="dataGrid" ShowHeaderWhenEmpty="True" DataKeyNames="skuid,sku_desc,cat_desc,cls_desc" UseAccessibleHeader="False" AutoGenerateColumns="False" EmptyDataText="No data available qwe123." AllowPaging="True" AllowSorting="True" OnPageIndexChanging="availableItemsGridView_PageIndexChanging" OnSorting="availableItemsGridView_Sorting">
當文本beeing在availableItemsFilterTextBox中改變時,沒有區別 - 它是否失去焦點或Enter被按下,回發發生兩次,並且事件TextChanged也觸發兩次。
更新面板觸發定義
<asp:AsyncPostBackTrigger ControlID="availableItemsFilterTextBox" EventName="TextChanged" />
在Firebug我可以看到夫婦的請求。其中第一個處於「中止」狀態
我已經通過設置AutoEventWireup="false"
並將隱式調用置於表單標記<form id="form2" runat="server" onload="Page_Load" >
中的「Page_Load」進行了頁面本身實驗。我在想這可能是兩次回傳的原因。但沒有成功...
我試圖在第一次回發期間保存文本框的文本值在ViewState中,然後將其與viewState中的值進行比較。但不幸的是,我發現在第一次和第二次回發之間,我從視圖狀態中丟失了數據。
我試圖使用會話製作相同的技巧。
string vsFilter = (string)Session[AvailableItemsFilterTypes_Text];
if (vsFilter != filter)
{
Session.Add(AvailableItemsFilterTypes_Text, filter);
this.LoadAvailableItems();
}
但是,這隻防止數據加載,因爲第一次回調加載數據,然後中止而不呈現。第二次回發被阻止調用LoadAvailableItems();
內LoadAvailableItems()我使用OracleAdapter,不得不調用存儲過程的OracleDbType.RefCursor
輸出參數,使排序和分頁availableItemsGridView我不得不從數據集中獲取數據視圖。然後將其綁定到availableItemsGridView。據我瞭解SqlDataSource是不兼容的與甲骨文工作...
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事件twise以及如何以及在哪裏和第一次回發請求beeing中止?
我進一步的研究表明,從文本框雙回發是它在Firefox和IE中只有一個回發的行爲... – adikas