Asp.net mvc 4 MVC 4.NET中基本CRUD操作的内部服务器错误

Asp.net mvc 4 MVC 4.NET中基本CRUD操作的内部服务器错误,asp.net-mvc-4,Asp.net Mvc 4,我刚刚开始学习.NETMVC4框架,在一些产生错误的基本CRUD操作方面遇到了问题。我有一个select元素,一旦发生更改,它会向我的服务器发送一个Ajax请求,以查找给定id的课程。以下是Ajax调用: $('.courseSelect').change(function () { $.ajax({ url: "@Url.Action("Find", "Roster")", dat

我刚刚开始学习.NETMVC4框架,在一些产生错误的基本CRUD操作方面遇到了问题。我有一个select元素,一旦发生更改,它会向我的服务器发送一个Ajax请求,以查找给定id的课程。以下是Ajax调用:

 $('.courseSelect').change(function () {
                $.ajax({
                    url: "@Url.Action("Find", "Roster")",
                    data: {
                        courseId: $('.courseSelect').val()
                    },
                    dataType : 'json',
                    type: "GET",
                    success: function (data) {
                        console.log(data);
                    },
                    error: function (xhr, err, type) {
                        console.log(xhr);
                        console.log(err);
                        console.log(type);
                    }
                });
            });
这将正确地以
http://localhost:62020/Roster/Find?courseId=2

然后,我的花名册控制器中有一个查找操作请求:

        [HttpGet]
        public ActionResult Find(int? courseId)
        {
            StudentsViewModel selectedCourse = new StudentsViewModel();
            List<Course> courses = Db.Courses.Where(s => s.Id >= 0).ToList();
            foreach (Course c in courses)
            {
                selectedCourse.AllCourses.Add(c);
            }

            selectedCourse.currentCourse = Db.Courses.Find(courseId);

            selectedCourse.AllStudents = Db.Students.Where(s => s.Id >= 0).ToList();

            return View(selectedCourse);

        }
[HttpGet]
公共行动结果查找(int?courseId)
{
StudentsViewModel selectedCourse=newstudentsviewmodel();
List courses=Db.courses.Where(s=>s.Id>=0.ToList();
foreach(课程中的课程c)
{
选择课程。所有课程。添加(c);
}
selectedCourse.currentCourse=Db.Courses.Find(courseId);
selectedCourse.AllStudents=Db.Students.Where(s=>s.Id>=0.ToList();
返回视图(selectedCourse);
}
但是,即使在对每一行执行运行时调试时控制器逻辑似乎正确,Ajax仍会失败,并出现500个内部服务器错误。

您可以尝试更改:

ActionResult Find(int? courseId)
return View(selectedCourse);
致:


另外,我会检查
数据
响应,以确保框架成功解析JSON。

我认为这与以下事实有关:我在同一个控制器中有一个索引ActionResult,该控制器返回一个View(),其上有一个表,显示课程中的所有学生。但是,当我们只需要特定的学生或课程时,我不确定是否要处理它。您应该返回Json(selectedCourse),而不是返回视图(selectedCourse)。这是我的第一个猜测。如果我只想发回一个部分HTML视图,比如一个显示所请求的新数据的表,该怎么办?然后,您可以更改控制器以返回一个包含HTML的字符串,并在Ajax调用中将您的数据类型设置为“text”(您可能需要再次检查正确的值,该值来自内存)。然后你会得到一个字符串,你可以随意显示你的字符串(如果说它是格式化的HTML)。。或者Firefox的Firebug,或者IE中的开发工具,或者。谢谢,这是正确的。然而,在.NET MVC framework中,发送JSON对象并让客户端处理将JSON数据放入DOM是更为标准化的做法,还是返回包含数据的表的HTML部分更好?我强烈建议使用JSON。1) 它很轻。2) HTML具有与之相关的安全风险,因为您完全相信服务器和任何用户输入都已完全清除。
JsonResult  Find(int? courseId)
return Json(selectedCourse, JsonRequestBehavior.AllowGet);