2010-11-18 3 views
1

Я смотрю на книгу MVC 2 в действии. Глава о автозаполнении находится в конце, который я использую в качестве ссылки. В контроллере возвращаемые результаты Json не преобразуются в список для автозаполнения. Книга не использовала Json, но я не мог использовать их альтернативу с общим списком.MVC: Не удается получить автозаполнение для работы

Итак, мой взгляд;

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SHP.WebUI.Models.HolidayRequestViewModel>" %> 
<script type="text/javascript" language="javascript"> 
    $(document).ready(function() { 
     $("input#SearchText").autocomplete('<%: Url.Action("FindNames", "Employee") %>'); 
    }); 

</script> 
<p>You must make sure that the correct person to approve your Annual Leave is currently selected</p> 
<p>Your current approver is <%: Html.DisplayFor(model => model.ApproverName) %></p> 
<p>If you want to change your approver, enter his/her name here and make your selection.</p> 
<p><%: Html.TextBoxFor(model => model.SearchText) %></p> 
<div id="test-panel" class="ui-state-default"> This panel will disappear on command.</div> 

И мой контроллер;

public JsonResult FindNames(string q) 
    { 
     List<EmployeeName> filteredEmployees = 
      Employee.GetAllCurrentEmployeesNames().Where(x => x.Fullname.ToLower().Contains(q.ToLower())).ToList(); 
     return Json(filteredEmployees, JsonRequestBehavior.AllowGet); 
    } 

* EDITED * Проблема с отправкой параметра теперь фиксируется с помощью «строка Q». Очевидно, а? Теперь это случай, когда JSON возвращается в список автозаполнения.

+0

Я не знаю механизм автозаполнения ASP.NET, но я ожидаю, что проблема - это имя параметра в URL-адресе. Какой точный URL - это генерация автозаполнения - что он назвал параметром? У вас есть какие-то конкретные маршруты, созданные для этого действия? – Rup

ответ

1

Я помощник для этого, вы можете использовать его без необходимости знать JQuery на всех

посмотрите, как это работает: http://demo.aspnetawesome.com/AutocompleteDemo

вы можете скачать библиотеку здесь: http://awesome.codeplex.com/

+0

Это выглядит фантастически. Хорошо стоит знать о – arame3333

4

Если вы используете jquery UI autocomplete, параметр строки запроса по умолчанию называется term. Итак:

public ActionResult FindNames(string term) 

Конечно, это может быть персонализированным:

$('input#SearchText').autocomplete({ 
    source: function(request, response) { 
     $.ajax({ 
      url: '<%: Url.Action("FindNames", "Employee") %>', 
      dataType: 'json', 
      data: { searchText: request.term }, 
      success: function(data) { 
       response(data); 
      } 
     }); 
    } 
}); 

Вопрос заключается в том, является ли это стоит.

+0

Вы находитесь на правильном пути. На самом деле мне следовало скопировать мою книгу, в которой указаны FindNames (строка q), поэтому q вместо термина. Почему бы это ни было, я понятия не имею. – arame3333

+0

@ arame3333, если я правильно помню 'q' использовался более старым плагином автозаполнения jquery, который теперь устарел в пользу пользовательского интерфейса jquery, и это то, что я бы рекомендовал вам использовать. –

+0

На самом деле, работая из книги, я использую этот pluggin; https://github.com/dyve/jquery.autocomplete/blob/master/index.html, которому сейчас более года. – arame3333

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