我在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
对象,以便设置上下文密钥?
答案 0 :(得分: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:强>
我放弃了尝试在客户端实现同样的目标。我相信能够在服务器端设置Context Key(在C#中)在灵活性方面具有很多优势(比如能够在需要时更改上下文密钥,而不仅仅是在更改下拉列表时) )。不过,如果有人知道如何在客户端(在JavaScript中)完成,请分享。
答案 1 :(得分:-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");
}