2017-05-20 1 views
0

code contrôleur500 Internal Server Error Lorsque vous envoyez une requête POST de jquery au contrôleur

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 code

$.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); 
    } 
}); 

Je suis arrivé cette erreur: 500 Internal Server Error: ObjectContext L'instance a été supprimée et ne peut plus être utilisée pour les opérations nécessitant une connexion.

+0

Ne pas envelopper la requête dans 'using' Reportez-vous [ces réponses] (http: // stackoverflow.com/questions/18398356/how-to-solve-the-error-the-objectcontext-instance-has-been-disposed-and-can-no-l) pour plus d'explications. –

Répondre

1

Votre retour à using peut provoquer cette erreur à cause de l'attribut de chargement paresseux d'Entity Framework. Et il dispose du contexte avant que les entités soient renvoyées.

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 }); 
    } 

Vous pouvez supprimer using wrap utiliser le chargement pour éviter l'envie erreur que vous faites face:

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 });