2015-06-22 2 views
1

Я пытаюсь просмотреть Ajax и выпадающий список. Пользователь вводит почтовый индекс в текстовое поле, а затем нажимает на поиск. Отсюда я хочу, чтобы заполнить выпадающий список со значениями, исходя из базы данных, Действие в отдельном контроллере: -Ajax MVC Обновление раскрывающегося списка

public ActionResult Search(string Pcode) 
{ 
return Json(new[] { 
    new { value = '1', text = "text 1" }, 
    new { value = '2', text = "text 2" }, 
    new { value = '3', text = "text 3" } 
}); 
} 

Мой HTML:

Pcode:- @Html.TextBox("GPPOST") 
    GP Practice: 
    @Html.EditorFor(model => model.Patient.GPSurgery) 
    <br/> 
    @Html.DropDownListFor(m =>m.Patient.GPSurgery  Enumerable.Empty<SelectListItem>(),"-- Select GP --") 
       GP : <input type="button" id="SearchPcode" value="Search"> 

И, наконец, Ajax :

 $(function() { 
      $('#SearchPcode').click(function() { 
       // get the new value 
       var value = $(this).val(); 
       // and send it as AJAX request to the action 
       $.ajax({ 
        url: '/GP_Practices/Search', //'<%= Url.Action("Search", "GP_Practices") %>', 
        type: 'POST', 
        data: { pcode: value }, 
        success: function (result) { 
         // when the AJAX succeeds refresh the dropdown list with 
         // The JSON values returned from the controller action 
         var GPNames = $('#Patient.GPSurgery'); 
         GPNames.empty(); 
         $.each(result, function(index, item) { 
          alert(item.text); 
         }); 

         $.each(result, function (index, item) { 
          GPNames.append(
           $('<option/>', { 
            value: item.value, 
            text: item.text 
           })); 
         }); 
        } 
       }); 
      }); 
     }); 

Когда я запускаю код я получаю Json результаты обратно, (который я могу увидеть в окне предупреждения).

Мои 2 проблемы:
1) Я не могу передать значение из текстового поля Html.TextBox («GPPOST»)

2) Выпадающий список не освежает с новыми значениями.

+0

Вы получаете какие-либо предупреждения? – mattytommo

+0

Привет, да, я получаю 3 предупреждения с текстом 1, текстом 2 и текстом 3 - так что вызов контроллера в порядке. Но я не могу получить раскрывающийся список для обновления или передать значение из текстового поля. – chris

ответ

1

1) Я не могу передать значение из текстового поля Html.TextBox («GPPOST»)

Это потому, что ваш Javascript проходит pcode, пока контроллер ожидает Pcode (корпус имеет значение).

Также, как Ehsan Sajjad упоминает, что вы не посылать значение текстового поля, но это отрывает большую проблему: Вы связывания двух полей одной и той же модели собственности, вы не можете сделать это , Вам нужно будет использовать отдельное поле для раскрывающегося списка и ввода для поиска.

2) Раскрывающийся список не освежает новыми значениями.

Это потому, что ваш селектор JQuery неправилен:

var GPNames = $('#Patient_GPSurgery'); 
+0

_ "Корпусные изделия" _. Нет. «DefaultModelBinder» не чувствителен к регистру. –

+0

@StephenMuecke Он не привязан к модели, его параметр представляет собой одну строку. Имена должны совпадать (включая обложку). – mattytommo

+0

Nope. OP отправляет метод 'ActionResult' с параметром' string Pcode'. «DefaultModelBinder» отвечает за привязку. 'data: {pcode: value},' или 'data: {pCOdE: значение},' работают одинаково. –

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