2012-03-17 4 views
1

Моя проблема в том, что я пытаюсь сделать представление двумя Html.RenderAction. В нем говорится: «Операция не может быть завершена, потому что DbContext был удален».Html.RenderAction в MVC с 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

ли вы когда-нибудь найти решение этой проблемы? Я столкнулся с такой же точной проблемой. –

ответ

0

Вам необходимо перечислить набор перед передачей его в представление. Это означает, что вы запрашиваете базу данных в допустимой области DbContext.

Вы можете сделать это с помощью .ToArray() в контроллере

+0

Но я получаю данные после вызова RenderAction, внутри 2 соответствующих методов действий. Таким образом, оба вызова имеют свои собственные данные – Tekno