【问题标题】:Set ContextKey for AutoCompleteExtender inside GridView在 GridView 中为 AutoCompleteExtender 设置 ContextKey
【发布时间】:2013-02-09 07:26:20
【问题描述】:

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


然后我找到this article,我尝试在服务器端设置上下文键:

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

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


问题:
如何访问 AutoCompleteExtender1 对象的下拉选择索引更改,以便我可以设置上下文键?

【问题讨论】:

    标签: asp.net ajax autocompleteextender


    【解决方案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;
        }
    }
    

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

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

    【讨论】:

      【解决方案2】:
      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");
      
      }
      

      【讨论】:

      • 添加一些描述以使这个答案更好。
      猜你喜欢
      • 1970-01-01
      • 2012-09-13
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多