2013-03-04 2 views
0

Я пытаюсь создать каскадное раскрывающееся меню. Мой контроллер выглядит следующим образом инициализировать вид ..Population A Select List Dynamically 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 пустое выпадающее меню, как и ожидалось.

Теперь, когда вы выбираете первый раскрывающийся список, я хочу вызвать действие в моем контроллере, чтобы заполнить второе раскрывающееся меню. Здесь я немного туманный по коду в действии, чтобы заполнить второе раскрывающееся меню. Я хочу использовать что-то вроде этого, чтобы вызвать вызов действия ..

$("#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

+0

Я только что вставил образец вырезать и вставить. Если это был я. Я просто сделаю все это частью действия. Вы также можете посмотреть, есть ли служба списка избранных, которую вы используете для возврата этих вещей. Если вы делаете это часто. В качестве альтернативы вы можете посмотреть WebAPI, который возвращает Json. Мы используем WebAPI для всех наших вещей Json. – GraemeMiller

+0

Можете ли вы указать мне пример, где у вас это есть. Я нажимаю контроллер, но когда я вернусь к javascript, возвращаемый JSON неправильно отформатирован, чтобы заполнить список выбора. Он возвращает это как имя «" System.Data.Entity.DynamicProxies.Course_C81CDD1DDC4D486F471F64D1F95990CD3518507F0B5BB9F718C0910A56B73D12 "" и значение = null для каждого курса. Данные, выходящие из контроллера, точны и правильно запрошены, так что это неправильно с моим кодом javascript. – MTL323

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