2016-03-24 3 views
0

Я пытаюсь настроить автозаполнение текстового поля на странице, но я не могу заставить его работать.MVC jQuery autocomplete не работает

У меня есть мои связки сконфигурированы:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
      "~/Scripts/jquery-{version}.js", // version is 2.2.1 
      "~/Scripts/jquery-ui-{version}.js" // version is 1.11.4 
)); 

В контроллере, функция, которая возвращает список пользователей.

public JsonResult GetInternalUsers() { 
    var results = db.Users 
     .Select(x => new { 
      UserId = x.UserId, 
      UserName = x.UserName, 
     } 
    ).ToList(); 

    return Json(results, JsonRequestBehavior.AllowGet); 
} 

окна редактирования динамически добавляются, так и внизу, XXX заменяется целым числом (то есть, Attendees0).

<input id="AttendeesXXX" type="text" name="Attendees[X]" class="form-control col-md-6" /> 

И, наконец, фактический сценарий:

$('#Attendees' + internalAttendees).autocomplete({ 
    source: function (request, response) { 
     $.ajax({ 
      url: '@Url.Action("GetInternalUsers", "Events")', 
      type: 'GET', 
      async: false, 
      success: function (data) { 
       response($.map(data, function (item) { 
        return { label: item.UserName, value: item.UserId } 
       })) 
      } 
     }); 
    }, 
    select: function (event, ui) { 
     $('#Attendees' + internalAttendees).val(ui.item.label); 
     return false; 
    }, 
    minLength: 1 
}); 

Часть, которая мне метания больше всего, что когда я печатаю $('#Attendees' + internalAttendees), то IntelliSense не вызывает autocomplete, так что если я даже не знаю, Я включаю правильные библиотеки.

Любая идея, что я делаю неправильно?

+0

Hi @Dan Champagne, попробуйте включить инструменты разработчика f12 и щелкнуть по вкладке «сеть», а затем перезагрузить эту страницу. Вы видите загрузку jquery перед пользовательским интерфейсом jquery? Если вы можете подтвердить, что загрузка jQuery IS сначала, что говорит ваша консоль? –

+0

@ mwwallace8 Да, jQuery загружается перед библиотекой ui. –

+0

И консоль говорит что? Я предполагаю, что в браузере есть некоторая ошибка, если скрипт не работает/не распознает автозаполнение. –

ответ

1

Есть несколько вещей, которые необходимо проверить.

То, что я делаю, это объявить мой селектор в качестве переменной

var $myElement = $('#myElement'); 

, так что я могу установить контрольную точку и проверить $ MyElement, чтобы увидеть, если это имеет значение.

Затем установите точку останова и убедитесь, что на самом деле вы нажимаете на свой код, так как элементы динамически добавляются. Если код в документе готов к работе до создания элемента, событие не будет прикреплено к элементу. Возможно, вам придется добавить элемент, а затем запустить код, который подключается.

Фактический вызов выглядит правильно, если вы установили точку останова в контроллере, получилось ли это?

Но я смущен. Почему это автозаполнение? Не хотите ли вы передать значение в параметре «data» вызова ajax? В настоящее время вы не фильтруете свой ответ вообще.

-1
> *** 
    > 
    > > for Mvc Artitecture you must delete already imbended 
    > > @Scripts.Render("~/bundles/Jquery") and 
    > > @Scripts.Render("~/bundles/Jquaryval") on all .cshtml files at the 
    > > end and for also views/Shared/_layout.cshtml at the end and put our 
    > > jaquery suitable files on his suitables .cshtmls files in head...and 
    > > lets enjoy. put on head..these files 
    > > 
    > > <link href="~/Content/jquery-ui-1.10.4.custom.min.css" 
    > > rel="stylesheet" type="text/css" /> <script 
    > > src="~/Scripts/jquery-1.10.2.js" type="text/javascript"></script> 
    > > <script src="~/Scripts/jquery-ui-1.10.4.custom.min.js" 
    > > type="text/javascript"></script> 
    > 
    > *** 


//////////////////////code behind download button////////////////////// 

Response.ContentType = "Application/pdf"; 
      Response.AppendHeader("Content-Disposition", "attachment; filename=help.pdf"); 
      Response.TransmitFile(Server.MapPath("~/doc/help.pdf")); 
      Response.End();