2013-03-04 51 views
1

我点击了控制器,但是当返回到JavaScript时,返回的JSON未正确格式化以填充选择列表。它返回这个名称为“”System.Data.Entity.DynamicProxies.Course_C81CDD1DDC4D486F471F64D1F95990CD35185 07F0B5BB9F718C0910A56B73D12“”和Value = null为每个课程。走出控制器的数据是好的,并询问这也是正确的疗法EIS有毛病我的javascript代码错误地将JSON返回给客户端MVC

这里是我的控制器:

public JsonResult GetCourses(int facilityId) 
{ 
    return Json(GetCoursesSelectList(facilityId), JsonRequestBehavior.AllowGet); 
} 

private SelectList GetCoursesSelectList(int id) 
{ 
    var Courses = db.Courses.Distinct().Where(a => a.FacilityId == id).ToList(); 
    SelectList list = new SelectList(Courses); 
    return list; 
} 

这里是我的JavaScript函数:

$("#ddlFacility").change(function() { 
      var selectedFacility = $(this).val(); 

      if (selectedFacility != null && selectedFacility != '') { 
       $.getJSON("@Url.Action("GetCourses")", { facilityId: selectedFacility }, function (courses) { 

        var coursesSelect = $('#ddlCourse'); 
        coursesSelect.empty(); 
        $.each(courses, function (index, course) { 
         alert(course.Course_Name); 
         coursesSelect.append($('<option/>', { 
          value: course.CourseId, 
          text: course.Course_Name 
         })); 
        }); 
       }); 
      } 
     }); 
+0

这是什么确实'SelectList list = new SelectList(Courses);'?什么是“SelectList”? – Bizmarck 2013-03-04 02:43:05

+0

这是由FacilityId过滤的数据库中的课程列表。 “1”设施到“多”课程。 – MTL323 2013-03-04 02:45:23

回答

0

您不需要将您的课程转换为SelectList - 将其转换为SelectList,然后将其转换为您的JSON对象,该JQuery不会按您想要的方式解析。一个简单的IEnumerable<Course>将正确转换。改变你的控制器动作以下应该解决您的问题:

private IEnumerable<Course> GetCoursesSelectList(int id) 
    { 
    return db.Courses.Distinct().Where(a => a.FacilityId == id).ToList(); 
    } 

编辑:的创工作的测试应用程序,与下拉从控制器被填充

的观点:

@{ 
    ViewBag.Title = "Index"; 
} 

<select id="ddlCourse"></select> 

<script> 
    $.getJSON("@Url.Action("GetCourses")", { facilityId: 1 }, function (courses) {    
     var coursesSelect = $('#ddlCourse'); 
     coursesSelect.empty(); 
     $.each(courses, function (index, course) {    
      coursesSelect.append($('<option/>', { 
       value: course.CourseId, 
       text: course.Course_Name 
      })); 
     }); 
    }); 
</script> 

控制器:

public class HomeController : Controller 
    { 
     public static IEnumerable<string> items = new List<string>() { "abc", "1234" }; 

     public ActionResult Index() 
     { 
     return View("Index"); 
     } 

     public JsonResult GetCourses(int facilityId) 
     { 
     return Json(GetCoursesSelectList(facilityId), JsonRequestBehavior.AllowGet); 
     } 

     private IEnumerable<Course> GetCoursesSelectList(int id) 
     { 
     return db.Courses.Distinct().Where(a => a.FacilityId == id).ToList(); 
     } 
    } 
+0

我appologize,这个主要目标是创建一个级联下拉... – MTL323 2013-03-04 02:47:59

+0

这将更新您的下拉列表,您是否更新代码并尝试它?我用我的简单测试更新了我的答案。 – 2013-03-04 02:49:57

+0

此选项将只添加我硬编码的课程。我试图根据我的数据库中的facilityId填充课程下拉菜单。 – MTL323 2013-03-04 02:54:57

相关问题