0

我正在尝试通过 AJAX 帖子根据上一个下拉列表的值填充下拉列表,但是,url 没有与控制器中的方法正确连接。在 FireBug 中声明以下错误:

"NetworkError: 500 Internal Server Error - http://localhost:1079/RoundDetail/GetCourses"

这是我的控制器:

public class RoundDetailController : Controller
    {
        private GolfTrackerEntities2 db = new GolfTrackerEntities2();

        public JsonResult GetFacilities(int id)
        {
            var facilities = db.Facilities.Distinct().ToList();
            return Json(facilities, JsonRequestBehavior.AllowGet);
        }
    }

这是我的javascript:

function changeCourses() {
            var val = $(this).val();
            $courses = $('#ddlCourses');

            $.ajax({
                url: "@Url.Action("GetCourses", "RoundDetail") ",
                type: "POST",
                dataType: 'json',
                data: "{ 'facilityId':'" + val + "'}",
                contentType: "application/json",
                success:
                    function (msg) {
                        console.log(msg);
                        var list = JSON.parse(msg.d);
                        for (var i = 0; i < list.length; i++) {
                            courseList += '<option value="' + course.Abbr + '">' + course.Name + '</option>';
                        }
                        $courses.html(courseList);

                    }
            });
        }
4

1 回答 1

0

我认为问题出在您的控制器上。你指定了另一个动作而不是动作导致错误,所以很难说是什么问题。也请单击 firebug 中的行并查看响应正文 - 它包含有关服务器错误的详细信息。

对于内容类型,似乎application/json不需要对 javascript 对象进行字符串化,并且可以传递{ facilityId: val }给数据。

此外,我不确定使用字符串连接构建选项列表是否正确 - 因为它不是 javascript 注入安全的。您可以使用

$courses.append($("<option ></option>").attr("value", course.Abbr).text(course.Name));

反而。

于 2013-06-20T20:37:51.147 回答