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

とった!サーバー側でオブジェクトに誤ってアクセスしていた方法を修正しましたが、機能しました。

サーバー側のコードは次のとおりです。ドロップダウンの選択されたインデックスの変更時に、の各行をループし、GridViewAutoCompleteExtenderオブジェクト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 に答える