在MVC 4 .NET中进行基本的CRUD操作出现了内部服务器错误。
在MVC 4 .NET中进行基本的CRUD操作出现了内部服务器错误。
我刚开始学习.NET MVC 4框架,并在一些基本的CRUD操作中遇到了错误。我有一个选择元素,当改变时,会发送一个Ajax请求到服务器以找到给定id的课程。以下是Ajax调用的代码:\n
$('.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); } }); });
\n这正确地发送一个请求,形式为`http://localhost:62020/Roster/Find?courseId=2`。\n然后,在我的Roster控制器中有一个Find ActionRequest:\n
[HttpGet] public ActionResult Find(int? courseId) { StudentsViewModel selectedCourse = new StudentsViewModel(); Listcourses = 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); }
\n然而,尽管控制器逻辑在运行时调试时似乎是正确的,但Ajax却以500内部服务器错误失败。
问题原因:在MVC 4 .NET中进行基本的CRUD操作时出现了内部服务器错误。原因是在Find方法中返回了一个View,而应该返回一个JsonResult。
解决方法:将Find方法中的返回类型从ActionResult改为JsonResult,并在返回时使用Json方法将selectedCourse对象转换为Json格式的数据返回给客户端。此外,建议使用JSON作为数据传输的标准,因为JSON轻量且相对安全,而HTML则存在安全风险。
以下是修改后的代码:
public JsonResult Find(int? courseId)
{
return Json(selectedCourse, JsonRequestBehavior.AllowGet);
}
通过以上修改,问题得到解决,并且在.NET MVC框架中,使用JSON对象作为数据传输更加标准化,将数据传输到客户端后,由客户端负责将JSON数据放入DOM中。