0

我在 GridView 中有一个 AJAX AutoCompleteExtender,如下所示:

<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。


然后我找到了这篇文章,并尝试在服务器端设置上下文键:

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

但代码编译失败并出现错误: The name 'AutoCompleteExtender1' does not exist in the current context


问题:
如何AutoCompleteExtender1在下拉列表的选定索引更改上访问对象,以便设置上下文键?

4

2 回答 2

1

知道了!我修复了我在服务器端错误地访问对象的方式,它起作用了!

这是服务器端代码——在下拉列表的选定索引更改时,我循环遍历 的每一行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;
    }
}

希望这可以帮助遇到这个问题的人!

PS:
我放弃了尝试在客户端实现相同的目标。我相信能够在服务器端(在 C# 中)设置上下文键在灵活性方面有很多优势(比如能够在需要时更改上下文键,而不仅仅是更改下拉菜单)。不过,如果有人知道如何在客户端(在 JavaScript 中)完成它,请分享。

于 2013-02-10T15:58:59.627 回答
-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");

}
于 2016-06-27T10:48:52.137 回答