ASP.NET MVC使用500个内部状态代码发送Json对象

时间:2017-03-03 07:17:33

标签: asp.net json asp.net-mvc

让我们先来看一下代码块;

发送json数据的控制器功能

[HttpGet]
public ActionResult LoadCourseForDataTable()
{
    using (var dd = new DBContext())
    {
        var data = dd.Courses.ToList();
        return Json(new {data = data}, JsonRequestBehavior.AllowGet);
    }             
}

此块用于从上面的代码块中获取json数据;

<script>
    $(document).ready(function () {
        $('#CourseTable').DataTable({
            "ajax": {
                "url": "/Course/LoadCourseForDataTable",
                "type": "GET",
                "datatype": "json",
            },
            "columns": [
                { "data": "CourseID", "autoWidth": true },
                { "data": "Title", "autoWidth": true },
                { "data": "Credits", "autoWidth": true },
                { "data": "DepartmentID", "autoWidth": true },
            ]
        });
    });
</script>

必须在客户端服务器上加载的所有库完全正确地完成并加载。它们在这个问题上没有问题。

服务器响应 500内部错误

以下是详细的例外情况;

ObjectContext实例已被释放,不能再用于需要连接的操作。

我认为一切都是真的但我有这个问题很有意思。你能帮助我吗?谢谢 。 。

1 个答案:

答案 0 :(得分:0)

这很可能是因为您启用了延迟加载。在处理DBContext时,您将关闭与数据库的连接,以便在关闭using语句后无法加载任何相关实体。

事情是,在传递方法的结果之前运行using语句中的dispose。当JsonResult尝试序列化您的课程时,他们会看到有一个Lazy Loaded属性并尝试加载它。但此时与数据库的连接已关闭。

我严格反对网络方案中的延迟加载。出于这个原因和许多其他人。因此,我将给你的唯一建议是禁用延迟加载,如果你想包含相关的实体,你应该热切地获取它们。