将JSON错误地返回给客户端MVC

时间:2013-03-04 02:31:06

标签: jquery asp.net-mvc

我正在点击控制器但是当我回到javascript时,返回的JSON格式不正确以填充选择列表。它将其返回为名称“”System.Data.Entity.DynamicProxies.Course_C81CDD1DDC4D486F471F64D1F95990CD35185 07F0B5BB9F718C0910A56B73D12“”,并且每个课程的值= null。来自控制器的数据很好并且正确查询,因此我的javascript代码出错了

这是我的控制器:

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

1 个答案:

答案 0 :(得分: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();
      }
   }