2009-09-22 6 views
0

Могу ли я сделать ASP.NET AJAX AutoCompleteExtender использовать ASP.NET MVC JsonResult, а не ASMX Webservice?ASP.NET MVC и ASP.NET AJAX Toolkit AutoCompleteExtender

У меня есть ASP.NET AJAX Toolkit AutoCompleteExtender на ASP.NET MVC View. В моем MVC-контроллере используется функция типа JsonResult.

ASP.NET MVC Просмотр:

<form runat="server"> 
    <asp:ScriptManager 
     ID="ScriptManager1" 
     runat="server" 
     EnableScriptGlobalization="true" /> 
    <ajaxToolkit:AutoCompleteExtender 
     ID="autoComplete1" 
     runat="server" 
     TargetControlID="TextBox1" 
     ServiceMethod="find" 
     ServicePath="/thing" 
     MinimumPrefixLength="1" 
     CompletionInterval="1000" 
     EnableCaching="true" 
     CompletionSetCount="20" 
     DelimiterCharacters=";" 
     ShowOnlyCurrentWordInCompletionListItem="true" /> 
    <asp:TextBox 
     ID="TextBox1" 
     runat="server" /> 
</form> 

ASP.NET MVC контроллер:

<AcceptVerbs(HttpVerbs.Post)> _ 
Function Find(ByVal collection As FormCollection) As JsonResult 
    Dim search As String = collection(0) 
    Dim j As New JsonResult 
    j.Data = ... 
    Return j 
End Function 

Это терпит неудачу, потому что collection.Count 0. Кроме того, Request.QueryString.Count 0 .

Как передать введенную строку в функцию Find()?

ответ

3

К сожалению, для автозаполнения ASP.NET AJAX Extended требуется веб-сервис SOAP.

При этом источник доступен на CodePlex, поэтому вы, вероятно, можете изменить его, чтобы взять строку JSON.

Лично я использую JQuery в другом месте на сайте, я решил не использовать материал ASP.NET AJAX и идти с плагином Jquery (jQuery.Autocomplete)

Это были дополнительные преимущества:

  1. Принимая строку JSON.
  2. Требуется только 2 ссылки на скрипт (jQuery и сценарий автозаполнения), а не 7, которые мне нужны для опции ASP.NET AJAX.
  3. Я могу легко получить миниатюрные версии как jQuery, так и автозаполнения, но только сценарии ClientSide в загрузке ASP.NET AJAX не уменьшены (если только я что-то пропустил).

Очевидно, что если вы уже загружаете фреймворк в другое место для других целей, то ваш пробег может отличаться.

+0

Вместо этого я использовал jQuery. Он работал хорошо. http://stackoverflow.com/questions/1533761/jquery-email-address-input/1533790#1533790 –

2

Если проблема использования веб-службы ASMX является проблемой, другой альтернативой является настройка элемента управления автозаполнения для вызова метода страницы, который может находиться в коде, стоящем за страницей (или контролем), о которой идет речь.

Обзор того, как установить это, можно найти here.