Html.RenderAction в MVC с EntityFramework - PullRequest
1 голос
/ 18 марта 2012

Моя проблема, когда я пытаюсь визуализировать представление с двумя Html.RenderAction. В нем говорится: «Операция не может быть завершена, поскольку удален DbContext».

Я настроил 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, нет проблем !!!!!

1 Ответ

0 голосов
/ 18 марта 2012

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

Вы можете сделать это, используя .ToArray () в вашем контроллере

...