【问题标题】:Internal Server Error for basic CRUD operations in MVC 4 .NETMVC 4 .NET 中基本 CRUD 操作的内部服务器错误
【发布时间】: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


【解决方案1】:

你可以尝试改变:

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

收件人:

JsonResult  Find(int? courseId)
return Json(selectedCourse, JsonRequestBehavior.AllowGet);

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

【讨论】:

  • 谢谢,工作正确。但是,在 .NET MVC 框架中,发送 JSON 对象并让客户端处理将 JSON 数据放入 DOM 是否更标准化,或者返回包含数据的表的 HTML 部分是否更好?
  • 我强烈推荐 JSON。 1)重量轻。 2) HTML 具有与之相关的安全风险,因为您完全相信服务器和任何用户输入都已完全清理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
相关资源
最近更新 更多