2012-03-17 60 views
1

我的問題是當我嘗試使用兩個Html.RenderAction呈現視圖。它說:「操作無法完成,因爲DbContext已被處置」。MVC中的Html.RenderAction與EntityFramework

我Ninject這樣配置:

Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope; 

,但如果我在默認的方式做...

Bind<IUnitOfWork>().To<UnitOfWork>() 

沒有錯誤。

我必須在RequestScope中使用它(所以我認爲),但我該怎麼做呢?看起來,當第二個Html.RenderAction被稱爲之前的DbContext時,它已經被處理了!

更新:

這是(概括爲簡潔起見)

@model FoodAway.Model.Product 
@Html.ValidationSummary(true) 
<fieldset> 
    <legend>Producto</legend> 
    @using (Html.BeginForm()) 
    { 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.Name) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Name) 
      @Html.ValidationMessageFor(model => model.Name) 
     </div> 
     @Html.HiddenFor(model => model.Id) 
     <p> 
      <input type="submit" value="Guardar" /> 
     </p> 
    } 
    <fieldset> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.Ingredients) 
     </div> 
     <div class="editor-field"> 
      @{Html.RenderAction("IngredientsToRemoveList", "Ingredients");} 
     </div> 
    </fieldset> 
    <fieldset> 
     @{Html.RenderAction("IngredientsToAddList", "Ingredients");} 
    </fieldset> 
</fieldset> 

和他的控制器/行動的主要觀點:

public ActionResult EditProduct(string name) 
    { 
     Product product = unitOfWork.ProductRepository.Get(i => i.Name ==name).FirstOrDefault(); 
     if (product == null) 
      return HttpNotFound(); 
     return View(product); 
    } 

所以,在的DbContext的錯誤是,當我有這2個RenderAction方法,奇怪的是如果我只有1個RenderAction沒有問題!!!!!

+0

使用.ToArray()你有沒有找到解決這個做到這一點?我遇到了同樣的問題。 – 2014-03-28 21:12:03

回答

0

您需要枚舉集合,然後將其傳遞給視圖。這意味着您在DbContext的有效範圍內查詢數據庫。

您可以通過在控制器

+0

但是在調用RenderAction之後,我在2個相應的操作方法中獲取了數據。所以這兩個電話都有自己的數據 – Tekno 2012-03-18 10:45:40