1

我正在点击控制器,但是当我回到 javascript 时,返回的 JSON 格式不正确以填充选择列表。它以名称“System.Data.Entity.DynamicProxies.Course_C81CDD1DDC4D486F471F64D1F95990CD35185‌​07F0B5BB9F718C0910A56B73D12”和每门课程的 Value=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
                        }));
                    });
                });
            }
        });
4

1 回答 1

0

您不需要将 Courses 转换为 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();
      }
   }
于 2013-03-04T02:46:46.927 回答