我正在点击控制器但是当我回到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
}));
});
});
}
});
答案 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();
}
}