2013-05-03 77 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($(「」,{值:醫院價值,文本:醫院文本}