2013-02-09 18 views
0

我有一個AJAX AutoCompleteExtender,在GridView,如下所示:集ContextKey爲AutoCompleteExtender裏面的GridView

<asp:GridView 
    ID="GV1" 
    runat="server" 
    AllowPaging="True" 
    OnPageIndexChanging="GV1_OnPageIndexChanging" 
    OnRowCommand="GV1_RowCommand"> 
    ... 

    <asp:TextBox 
     ID="txt1" 
     runat="server" 
     onkeyup = "SetContextKey()"> 
    </asp:TextBox> 

    <cc1:AutoCompleteExtender 
     ID="AutoCompleteExtender1" 
     runat="server" 
     TargetControlID="txt1" 
     ServiceMethod="GetACEList" 
     ServicePath="AutoComplete.asmx" 
     UseContextKey = "true" 
     MinimumPrefixLength="1" 
     EnableCaching="true" 
     CompletionSetCount="1" 
     CompletionInterval="100" 
     CompletionListCssClass="autocomplete_completionListElement" 
     CompletionListItemCssClass="autocomplete_listItem" 
     CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem"> 
    </cc1:AutoCompleteExtender> 

    ... 
</asp:GridView> 

當試圖設置上下文鍵,我無法訪問在該AutoCompleteExtender客戶端以及服務器端。


在客戶端,我想:

function SetContextKey() { 
    $find('AutoCompleteExtender1').set_contextKey($get("<%=ddlCountry.ClientID%>").value); 
} 

但JavaScript是無法找到 'AutoCompleteExtender1' 對象。 我意識到這是因爲生成的HTML中有很多'AutoCompleteExtender1'對象,每個對象都有唯一的ID。


然後我發現this article,我嘗試設置在服務器端的背景下鍵:

protected void ddlCountry_OnSelectedIndexChanged(object sender, EventArgs e) { 
    AutoCompleteExtender1.ContextKey = ddlCountry.SelectedValue; 
} 

但代碼編譯失敗,出現錯誤: The name 'AutoCompleteExtender1' does not exist in the current context


問題:
如何訪問選定索引c上的AutoCompleteExtender1對象下拉下拉以便我可以設置上下文鍵?

回答

1

Got it!我解決了我在服務器端錯誤地訪問對象的方法,它工作正常!

這裏的服務器端代碼 - 在液滴的選擇折射率變化時,我循環通過每個GridView的行的,並設置每個AutoCompleteExtender對象的ContextKey到下拉的選定值:

protected void ddlCountry_OnSelectedIndexChanged(object sender, EventArgs e) { 

    foreach (GridViewRow gvRow in gvGV1.Rows) { 

     AjaxControlToolkit.AutoCompleteExtender AutoCompleteExtender1 
     = (AjaxControlToolkit.AutoCompleteExtender)gvRow.FindControl("AutoCompleteExtender1"); 

     AutoCompleteExtender1.ContextKey = ddlCountry.SelectedValue; 
    } 
} 

希望這可以幫助有人絆倒這個問題!

P.S:
我放棄了試圖實現對客戶端同樣的事情。我相信能夠在服務器端設置Context Key(在C#中)在靈活性方面具有很多優勢(如能夠根據需要更改環境鍵,而不僅僅是在更改下拉列表時)。不過,如果有人知道如何在客戶端完成(使用JavaScript),請分享。

-1
var grid = document.getElementById("<%= grdAddItems.ClientID%>"); 
for (var i = 0; i < grid.rows.length - 1; i++) { 
var txtAmountReceive = $("input[id*=txt1]") 
var GridRowID = (txtAmountReceive[i].valueOf('id').id).replace("txt1", ""); 
var AutoCompleteExt = GridRowID + 'AutoCompleteExtender1'; 

$find(AutoCompleteExt).set_contextKey("1"); 

} 
+1

添加一些描述以使答案更好。 – 2016-06-27 19:07:26