2016-11-08 11 views
0

ModelStateが有効でない場合、データベースから何かを取り出してモデルに戻す必要がありますが、usingを使用することができないようです。DbContextを使用してモデルを使用してビューを返す場合

だから、このコードは動作します:

[HttpPost] 
     public ActionResult EditProduct(ProductVM productVM, HttpPostedFileBase file) 
     { 
      // Check model state 
      if (!ModelState.IsValid) 
      { 
       Db db = new Db(); 
       productVM.Categories = new SelectList(db.Categories, "Id", "Name"); 

       return View(productVM); 

      } 

      return View(productVM); 
     } 

そして、このコードは、次のエラーがスローされます。

The operation cannot be completed because the DbContext has been disposed. 

[HttpPost] 
public ActionResult EditProduct(ProductVM productVM, HttpPostedFileBase file) 
{ 
    // Check model state 
    if (!ModelState.IsValid) 
    { 
     using (Db db = new Db()) 
     { 
      //Db db = new Db(); 
      productVM.Categories = new SelectList(db.Categories, "Id", "Name"); 
     } 

     return View(productVM); 

    } 

    return View(productVM); 
} 

は私が何とかusingを使用し、まだそれが動作することはできますか?

+1

試し 'db.Categories.ToList();' – Berkay

+0

が動作しているようです!それは、DbContextが処分されていることと何が関係していますか? – frc

+0

あなたは本当に 'using'を必要としませんが、あなたがするなら' .ToList() 'または' .AsEnumerable() 'を使ってコレクションを具体化する必要があります –

答えて

0

@Stephen Mueckeは、ToList()またはAsEnumerable()を使用してコレクションを具体化する必要があると言いました。コレクションを列挙しないと、すぐには実行されません。だからあなたはそのエラーを受けているのです。だからそれはすべきです。

productVM.Categories = new SelectList(db.Categories.ToList(), "Id", "Name"); 

ホープ助け、

関連する問題