AutoCompleteExtender в ASP.NET дополнительная информация - PullRequest
2 голосов
/ 09 октября 2008

как передать дополнительную информацию методу сервиса, возвращающему коллекцию предметов? Я попытаюсь объяснить, что я имею в виду, у меня есть 2 текстовых поля в форме, мне нужно заполнить имена на основе определенного идентификатора учетной записи в базе данных. Итак, мне нужно передать целое число в метод getNamesForDropDown. Я не мог понять, что делать, поэтому я поступил неправильно и использовал CompletionSetCount для фактической передачи необходимой мне информации:

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string[] getNamesForDropDown(string prefixText, int count) 
{
   String sql = "Select fldName From idAccountReps Where idAccount = " + count.ToString();
   //... rest of the method removed, this should be enough code to understand
   //... the evil wrongness I did. 
}

в моем файле aspx на лицевой стороне, я устанавливаю CompletionSetCount, основываясь на идентификаторе учетной записи, который пользователь просматривает на этой странице

<ajaxtk:AutoCompleteExtender 
    runat="server" 
    ID="AC1" 
    TargetControlID="txtAccName"
    ServiceMethod="getNamesForDropDown"
    ServicePath="AccountInfo.asmx"
    MinimumPrefixLength="1" 
    EnableCaching="true"
    CompletionSetCount='<%# Eval("idAccount") %>'
/>

Итак, это определенно неправильный путь ... что будет правильным?

Ответы [ 4 ]

5 голосов
/ 09 октября 2008

azam имеет правильную идею, но сигнатура метода автозаполнения также может иметь третий параметр:

открытая строка [] yourmethod (префикс строкиText, число int, строка contextKey )

Вы можете разделить результаты строки contextKey, используя метод Azam, но таким образом вам не нужно беспокоиться о санации ввода пользователем разделителя .Split () (:)

3 голосов
/ 09 октября 2008

Святой дым, я думаю, что это то, что мне нужно, клянусь, я никогда не видел эту опцию до того, как начал программировать это. Это новое свойство для autocompleteextender?

Выдержка из документации :

ContextKey - специфичный для пользователя / страницы контекст, предоставляемый для дополнительной перегрузки веб-метода, описанного ServiceMethod / ServicePath. Если используется ключ контекста, он должен иметь такую ​​же сигнатуру с дополнительным параметром contextKey типа string:

[System.Web.Services.WebMethod] [System.Web.Script.Services.ScriptMethod] открытая строка [] GetCompletionList ( префикс строкиТекст, число int, строка contextKey) {...}

Обратите внимание, что вы можете заменить "GetCompletionList" именем по вашему выбору, но тип возвращаемого значения, а также имя и тип параметра должны точно совпадать, включая регистр.

Редактировать: Неважно, является ли он новым или нет, или я просто полностью пропустил это. Это работает, и я счастлив. У меня ушло около 10 минут, чтобы понять, на что я могу ответить.

2 голосов
/ 09 октября 2008

Если хотите, вы можете использовать разделитель с префиксом Text. Таким образом, вы можете передать «1: bcd» и в конце службы вы можете разделить два элемента:

string[] arguments = prefixText.Split(':'); 
int id = Int32.Parse(arguments[0]);
string text = arguments[1]; 
1 голос
/ 27 сентября 2011
...