2013-12-15 4 views
2

В моем приложении MVC 4 я хочу заполнить Html.LisboxFor с результатом Ajax.Как заполнить Html.Listbox с результатом Ajax с помощью mvc 4

Мой Вид: @using (Html.BeginForm ("UpdatePriority", "Приоритет", FormMethod.Post)) {

@Html.Hidden("myListBoxValuesValues") 

    <div class="row"> 

     <div class="col-md-2"> 
      <label>FA:</label> 
      @Html.ListBoxFor(m => m.FA, new MultiSelectList(@Model.FA), new { @class = "lbx_FA" }) 
     </div> 

     <div class="col-md-1"> 
      <input id="btnAdd" type="button" value=" > " onclick="addItem();" /> 
     </div> 

     <div class="col-md-2"> 
      <label>CEID list:</label> 
      @Html.ListBoxFor(model => model.CEIDs, new MultiSelectList(Model.CEIDs), new { @class = "lbx_CEIDs" }) 
     </div> 

...and so on.. 

Мой мой контроллер функции (возвращает строку модели JSon):

public string getCeidPerFA(string FA) 
     { 
      return unitOfWork.ToolRequiredRepository.getCEIDsPerFA_Scenario(DAL.UnitOfWork.Scenario, FA); 
     } 

функция репозиторий:

internal string getCEIDsPerFA_Scenario(string scenario, string FA) 
     { 
      //create the result list (FAs): 

      List<string> FAs = FA.Split(',').ToList(); 

      var CEIDs = from row in context.ToolRequireds 
         where row.Scenario == scenario && FAs.Contains(row.FA) 
         select row.CEID; 

      List<string> lst = CEIDs.Distinct().ToList(); 

      //create Json Result: 

      List<SelectListItem> items = new List<SelectListItem>(); 

      foreach (var ceid in lst) 
      { 
       items.Add(new SelectListItem { Text = ceid, Value = ceid }); 
      } 


      return Json.Encode(items); 
     } 

Мой текст:

function addItem() { 

    var result = ""; 

    var x = document.getElementById("FA"); 
    for (var i = 0; i < x.options.length; i++) { 
     if (x.options[i].selected == true) { 
      result += x.options[i].value + ","; 
     } 
    } 

    result = result.substring(0, result.length - 1); 

    $.ajax({ 

     url: "@(Url.Action("getCeidPerFA", "CeidSelection"))", 

     data: { "FA": result }, 

     success: function (data) { 


      if (data.length > 0) { 
       JSON.pa 
       $("#CEIDs").append(JSON.parse(data)); 
      } 
      else 
       alert("No Result"); 
     }, 

     error: function (xhr) { 

      alert("Something went wrong, please try again"); 

     } 

    }); 
} 

Мой код неправильный, но я понятия не имею, как это сделать. Любая помощь будет очень оценена.

ответ

3

перебрать данные приводят как этот

$('#CEIDs').empty(); 
$.each($(data), function(key, value) { 
    $('#CEIDs').append('<option value=' + key + '>' + value + '</option>'); 
}); 
+0

я изменил мою функцию, возвращающую JsonResult. Я создаю JsonResult следующим образом: JsonResult js = new JsonResult() {Data = items, JsonRequestBehavior = JsonRequestBehavior.AllowGet}; Затем я использую ваш код внутри успеха ajax. теперь все, что я вижу в списке, это: «[object Object]». Я не вижу реальных значений Json. – user3087881

+0

, который говорит мне, что у вас есть элемент списка, но не значение. Если вы посмотрите на объект, используя firebug, вы сможете определить, какое имя вам нужно посмотреть. должно быть что-то вроде value.key и value.value, любые имена, которые у вас есть в этих полях –

+0

Thx! оно работает. Я использовал ваш совет и с помощью хром-инструментов для разработчиков удалось отладить Json и внести корректировки прорепа. – user3087881

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