2013-02-09 2 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, каждый из которых имеет уникальный идентификатор.


Я тогда нашел 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 по выбранному индексу c hange of drop down, поэтому я могу установить контекстный ключ?

ответ

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), пожалуйста, поделитесь.

-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

Добавить описание, чтобы сделать этот ответ лучше. –

Смежные вопросы