1

コントローラーにアクセスしていますが、javascript に戻ったときに、返される JSON が正しくフォーマットされていないため、選択リストにデータが入力されません。これを Name ""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 に答える