【发布时间】:2014-03-08 09:52:41
【问题描述】:
我刚刚开始学习 .NET MVC 4 框架,并且在一些基本的 CRUD 操作产生错误时遇到了麻烦。我有一个选择元素,在更改后,它会向我的服务器发送一个 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的形式正确发送请求
然后我的名册控制器中有一个 Find ActionRequest:
[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);
}
但是,即使在对每一行进行运行时调试时控制器逻辑看起来是正确的,Ajax 还是会失败并显示 500 Internal Server Error。
【问题讨论】:
-
我认为这与我在同一个控制器中有一个索引 ActionResult 的事实有关,该控制器返回一个 View(),上面有一个表,显示课程中的所有学生。但是当我们只需要特定的学生或课程时,我不确定如何处理它。
-
您在此处显示的示例返回一个 ActionResult 但您的 Ajax 函数需要 Json。您应该返回 Json(selectedCourse) 而不是返回 View(selectedCourse)。这将是我的第一个猜测。
-
如果我只想发回部分 HTML 视图,例如显示正在请求的新数据的表格,该怎么办?
-
然后您将更改您的控制器以返回一个包含您的 html 的字符串并在 Ajax 调用中将您的 dataType 设置为“文本”(您可能需要仔细检查正确的值,即来自内存) .然后你会得到一个字符串,你可以随心所欲地显示你的字符串(如果说它是格式化的 HTML)。
-
I'd recommend using Chrome and inspecting the http request。或 Firefox 的 Firebug,或 IE 中的开发工具,或 Fiddler2。
标签: asp.net-mvc-4