2013-05-03 47 views
2

我有两个组合框。首先comobobox我以这样的方式填充,它工作正常:ASP.NET MVC 3级联组合框不起作用

@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 
       ); 

为什么组合框不从DB我的列表结果工作?

+1

它看起来不错它的制动。如果它返回一个空列表,或者它是否返回一个空列表?如果它中断,那么错误信息是什么。如果它返回一个空列表,你是否仔细检查过查询是否返回任何内容? – 2013-05-03 11:13:56

+0

你看过Firebug /开发者工具当你改变下拉菜单时,你应该能够看到发布的内容以及响应中返回的内容。 – kolin 2013-05-03 14:35:34

+0

我是asp.net和jQuery中的新成员,调试jQuery帮助我找出错误,thanx。 – 2013-05-04 07:49:26

回答

0

使用此代码:

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

取而代之的是在最后一行

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

他为什么要让ToList()?HospitalsItems已经是SelectListI的列表电信设备制造商。 – 2013-05-03 11:19:12

+0

我发现了什么问题。这听起来很有趣,我只需要大写字母在我的jQuery代码: '代码 select.append($( '

0

我发现了什么问题。这听起来在我的jQuery代码滑稽我只需要大写字母:代码select.append($(“”,{值:医院价值,文本:医院文本}