1

私の問題は、2つのHtml.RenderActionを使用してビューをレンダリングしようとしたときです。「DbContextが破棄されたため、操作を完了できません」と表示されます。

Ninjectを次のように構成しました。

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

しかし、私がデフォルトの方法で行う場合...

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

エラーはありません。

RequestScopeで操作する必要がありますが(そう思います)、どうすればよいですか?2番目の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メソッドがある場合です。奇妙なことに、RenderActionが1つしかない場合は、問題はありません!!!!!

4

1 に答える 1

0

ビューに渡す前に、セットを列挙する必要があります。これは、DbContext の有効なスコープ内でデータベースにクエリを実行することを意味します。

これを行うには、コントローラーで .ToArray() を使用します

于 2012-03-18T00:02:07.467 に答える