2013-02-09 42 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