2013-05-03 4 views
2

У меня есть две выпадающие списки. Во-первых comobobox я заполнить таким образом, и это работает прекрасно:ASP.NET MVC 3 Cascading combobox не работает

@Html.DropDownListFor(
x => x.Town, 
new SelectList(Model.Towns, "Value", "Text"), 
"-- Select town --") 

    public IEnumerable<SelectListItem> Towns 
    { 
     get 
     { 
      List<DataRow> TownsListDB = OracleSelect("select * from Towns"); 
      List<SelectListItem> townsItems = new List<SelectListItem>(); 

      foreach (DataRow rw in TownsListDB) 
      { 
       townsItems.Add(new SelectListItem { Value = rw[0].ToString(), 
       Text = rw[1].ToString() }); 
      } 

      return townsItems; 
     } 
    } 

И зависит от города, я хочу, чтобы показать список больниц:

@Html.DropDownListFor(
x => x.Hospital, 
Enumerable.Empty<SelectListItem>(), 
"-- Select hospital --") 

Мой JQuery код является:

$('#Town').change(function() { 
    var selectedTown = $(this).val(); 
    if (selectedTown != null && selectedTown != '') { 
     $.getJSON('@Url.Action("Hospitals")', { town: selectedTown }, 
     function   (hospitals) { 
      var hospitalsSelect = $('#Hospital'); 
      hospitalsSelect.empty(); 
      $.each(hospitals, function(i, hospital) { 
       hospitalsSelect.append($('<option/>', { 
         value: hospital.value, 
         text: hospital.text 
        })); 
      }); 
      }); 
    } 
}); 

и C#:

 public ActionResult Hospitals(string town) 
     { 
      var modelHospital = new MedicalViewModel(); 
      List<DataRow> HospitalsListDB = modelHospital.OracleSelect 
      ("select * from Hospitals hh where hh.TownID = " + town); 
      List<SelectListItem> hospitalsItems = new List<SelectListItem>(); 

      foreach (DataRow rw in HospitalsListDB) 
      { 
//example: 
//rw[0]=101111 
//rw[1]=Dublin 
       hospitalsItems.Add(new SelectListItem { Value = rw[0].ToString(), 
       Text = rw[1].ToString() }); 
      } 
      return Json(
       hospitalsItems, 
       JsonRequestBehavior.AllowGet); 
      return Json(hospitalsItems, JsonRequestBehavior.AllowGet); 
     } 

Но это не сработает. Если я использую этот код в результате возврата, то это нормально:

return Json(Enumerable.Range(1, 6).Select(x => new { value = x, text = x }), 
        JsonRequestBehavior.AllowGet 
       ); 

Почему выпадающий не работает с моим результатом списка из БД?

+1

Он хорошо выглядит ли это тормоз. где-нибудь, или просто возвращает пустой список? Если он ломается, что сообщение об ошибке.Если он возвращает пустой список, вы дважды проверили, что запрос возвращает что-нибудь? –

+0

Вы посмотрели, что происходит в Firebug/Инструменты разработчика, когда вы изменяете раскрывающийся список, должны быть в состоянии видеть, что отправляется, и что возвращается в ответ. – kolin

+0

Я новичок в asp.net и jQuery, отладка jQuery помогла мне узнать об ошибке, thanx. –

ответ

0

Используйте этот код:

return Json(hospitalsItems.ToList(), JsonRequestBehavior.AllowGet); 

Вместо этого в последней строке

return Json(hospitalsItems, JsonRequestBehavior.AllowGet); 
+0

Зачем ему нужно делать это ToList()? HospitalsItems уже является списком SelectListI стем. –

+0

Я узнал, в чем проблема. Это звучит смешно, мне просто нужно заглавные буквы в моем коде JQuery: 'код select.append ($ ('

0

Я узнал, что была проблема. Это звучит смешно, мне просто нужно заглавные буквы в моем коде JQuery: код select.append ($ («», {значение:. Больница Значение, текст:. Больница Текст}

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