2013-03-04 121 views
0

我正在嘗試創建級聯下拉列表。我的控制器看起來像這樣來初始化視圖..動態填充選擇列表MVC

public ActionResult Create() 
     { 

      var model = new RoundDetailViewModel(); 


       model.AvailableFacilities = new SelectList(db.Facilities, "FacilityId", "Facility_Name"); 
       model.AvailableCourses = new SelectList(Enumerable.Empty<Course>(), "CourseId", "Course_Name"); 
       model.AvailableTeeTypes= new SelectList(Enumerable.Empty<TeeType>(), "TeeTypeId", "Name"); 


      return View(model); 
     } 

這將填充第一個下拉列表,也可以創建2個空下拉預期。

現在選擇第一個下拉列表,我想調用我的控制器中的Action來填充第二個下拉列表。這是我在填充第二個下拉列表的動作中的代碼有點模糊。我想用這樣的觸發調用動作..

$("#ddlFacility").change(function() { 
     var selectedFacility = $(this).val(); 
     if (selectedFacility != null && selectedFacility != '') { 
      $.getJSON("@Url.Action("GetCourse")", { facility: selectedFacility }, function (courses) { 
       var coursesSelect = $('#ddlCourse'); 
       coursesSelect.empty(); 
       $.each(courses, function (index, course) { 
        coursesSelect.append($('<option/>', { 
         value: course.value, 
         text: course.text 
        })); 
       }); 
      }); 
     } 
    }); 


    public ActionResult Courses(int facilityId) 
     { 
      //WHAT GOES HERE TO POPULATE SELECT LIST??   

     } 

回答

0

需要返回JsonResult,並允許獲得(如果這是你決定做什麼),或者你需要使它成爲一個POST,並做了POST到它。

public JsonResult GetCourses(int id) 
{   
    var Courses= db.Courses.Where(a=>facilityId==id).ToList(); 
    SelectList list = new SelectList(Courses,"Text", "Value"); 
    return Json(list , JsonRequestBehavior.AllowGet); 
} 
+0

的東西是它很好的做法,把雙方如果在我的控制器這些方法?或者應該把私人方法放在其他地方..試圖在使用mvc時學習好的實踐嗎? – MTL323 2013-03-04 00:45:35

+0

我剛貼上剪切和粘貼的樣本。如果是我。我只是將它全部納入行動。你也可以看看有一個你用來返回這些東西的選擇列表服務。如果你經常這樣做。或者,您可以查看返回Json的WebAPI。我們使用WebAPI來處理所有Json的東西 – GraemeMiller 2013-03-04 00:46:50

+0

你能指點我的例子嗎?我點擊控制器,但是當我回到JavaScript時,返回的JSON格式不正確,無法填充選擇列表。它返回這個名稱爲「」System.Data.Entity.DynamicProxies.Course_C81CDD1DDC4D486F471F64D1F95990CD3518507F0B5BB9F718C0910A56B73D12「」和每個課程的Value = null。來自控制器的數據是正確的,並正確查詢,所以它有問題,我的JavaScript代碼 – MTL323 2013-03-04 01:30:25