【问题标题】:500 Internal Server Error When sending POST request from jquery to controller将 POST 请求从 jquery 发送到控制器时出现 500 内部服务器错误
【发布时间】:2017-10-20 09:08:12
【问题描述】:

控制器代码

public ActionResult SearchByUPC_Name(String keyword)
{
    using (DbPOSEntities db = new DbPOSEntities())
    {
        var CompanyID = ((UserModel)Session["User"]).CompanyID;
        var items = db.tblItems.Where(i => i.CompanyID == CompanyID 
                        && i.IsDeleted == false 
                        && (i.UPC == keyword || i.Name.Contains(keyword))).ToList();
        return Json(new { Success = true, Items = items });
    }
}

Js 代码

$.ajax({
    url: "/Item/SearchByUPC_Name",
    type: "POST",
    async: true,
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify({ "keyword": searchStr }),
    dataType: "json",
    success: function (response) {
        debugger;
        if (response.Success) {
            console.log('ok');
        }
        else {
            console.log('not ok');
        }
    },
    error: function (err) {
        alert(err.statusText);
    }
});

我收到此错误:500 Internal Server Error : ObjectContext 实例已被释放,不能再用于需要连接的操作。

【问题讨论】:

  • 不要将查询包装在using 中,更多解释请参考these answers

标签: jquery asp.net-mvc asp.net-mvc-4 asp.net-mvc-3


【解决方案1】:

由于 Entity Framework 的延迟加载属性,您的 using wrap 可能会导致此错误。它会在返回实体之前处理上下文。

using (DbPOSEntities db = new DbPOSEntities())
    {
        var CompanyID = ((UserModel)Session["User"]).CompanyID;
        var items = db.tblItems.Where(i => i.CompanyID == CompanyID 
                        && i.IsDeleted == false 
                        && (i.UPC == keyword || i.Name.Contains(keyword))).ToList();
        return Json(new { Success = true, Items = items });
    }

您可以删除using wrap 以使用急切加载以避免您面临的错误:

DbPOSEntities db = new DbPOSEntities();
var CompanyID = ((UserModel)Session["User"]).CompanyID;
var items = db.tblItems.Where(i => i.CompanyID == CompanyID 
                    && i.IsDeleted == false 
                    && (i.UPC == keyword || i.Name.Contains(keyword))).ToList();
return Json(new { Success = true, Items = items });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2022-11-01
    相关资源
    最近更新 更多