2013-02-28 4 views
0

Я хочу использовать AjaxToolKitAutoComplete особенность. Синтаксис тега:Автозаполнение в AjaxToolKit

<ajaxToolkit:AutoCompleteExtender ID="autoComplete1" runat="server" 
    EnableCaching="true" 
    BehaviorID="AutoCompleteEx" 
    MinimumPrefixLength="2" 
    TargetControlID="myTextBox" 
    ServicePath="AutoComplete.asmx" 
    ServiceMethod="GetCompletionList" 
    CompletionInterval="1000" 
    CompletionSetCount="20" 
    CompletionListCssClass="autocomplete_completionListElement" 
    CompletionListItemCssClass="autocomplete_listItem" 
    CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem" 
    DelimiterCharacters=";, :" 
    ShowOnlyCurrentWordInCompletionListItem="true"> 
    <!-- Some formatting code --> 
</ajaxToolkit:AutoCompleteExtender> 

Есть атрибут ServicePath и ServiceMethod, который помогает тег для извлечения данных из. ServiceMethod имеет схему:

[WebMethod] 
public string[] GetCompletionList(string prefixText, int count) 

Метод ожидает только два параметра. Для некоторых бизнес-логики требование я хочу послать три параметра методу, как:

[WebMethod] 
public string[] GetCompletionList(string type, string prefixText, int count) 

Как я могу передать этот третий параметр и принять его в сервисный метод для обработки. Мои результаты будут зависеть от этого параметра. Как я могу это достичь? Спасибо заранее.

ответ

0

Вы не можете добавить третий параметр. Но вы можете прочитать эту информацию о параметре, сохранив ее, а затем извлекая ее из Session или Request, обратившись к ним из HttpContext.Current, так как вы находитесь в статическом методе.

+0

вы уверены? В моем случае у меня есть четыре переключателя, и я хочу рассмотреть, какой из них проверяется при возврате списка. Я не хочу делать обратную передачу в течение всего этого процесса. Как определить, какой переключатель установлен. – MaxRecursion

+0

Добавьте точку останова в метод 'GetCompletionList' и посмотрите« HttpContext.Current.Request », вы увидите все входы формы. Это работает так, потому что, когда метод вызывается, браузер выполняет запрос на сервер и отправляет все данные формы. Будут значения радиоблоков –

1

Вы можете передать contextKey через третий аргумент.

При настройке ajaxToolkit: AutoCompleteExtender, добавьте пару ключ-значение UseContextKey = «True», например

<ajaxToolkit:AutoCompleteExtender ID="autoComplete1" runat="server" 
    UseContextKey="True" 
    EnableCaching="true" 
    BehaviorID="AutoCompleteEx" 
    MinimumPrefixLength="2" 
    TargetControlID="myTextBox" 
    ServicePath="AutoComplete.asmx" 
    ServiceMethod="GetCompletionList" 
    CompletionInterval="1000" 
    CompletionSetCount="20" 
    CompletionListCssClass="autocomplete_completionListElement" 
    CompletionListItemCssClass="autocomplete_listItem" 
    CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem" 
    DelimiterCharacters=";, :" 
    ShowOnlyCurrentWordInCompletionListItem="true"> 
    <!-- Some formatting code --> 
</ajaxToolkit:AutoCompleteExtender> 

Установите контекст любой строки вы хотите, прежде чем метод услуга называется:

function setContextKey() { 
    text = 'my type information'; 
    $find('<%=autoComplete1.ClientID%>').set_contextKey(text); 
} 

Затем в коде позади, у вас есть доступ к этому contextKey:

[System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()] 
public static string[] GetCompletionList(string prefixText, int count, string contextKey) 
{ 
    string myType = contextKey; 
} 
Смежные вопросы