@foreach (Thing thing in Model) {
@Html.Action("someAction", "someOtherController", thing)
//kind of a PartialView but coming from another controller
}
-
public class someOtherController: Controller
{
public PartialViewResult someAction(Thing Model)
{
...
}
この Html.Action が呼び出されると、The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
.Include()
これは通常、コード内の適切な場所で使用して修正できるエラーです。
しかし、この場合:
- デバッグ時に、「もの」または含まれているサブエンティティが破棄されたようには見えません。
- ブレークポイントを設定することはできます
@Html.Action("someAction", "someOtherController", thing)
が、メソッドの最初の行にブレークポイントを設定すると、someAction(...)
到達することはありません。 - このような部分ビューを使用する別のページがあり、完全に機能します
@Html.Action("someAction", "someOtherController", thing)
部分ビューから呼び出すのではなく、代わりにコンテンツを生成すると、完全に機能します。-
したがって、その呼び出しとコントローラーの間に何か問題があるに違いありませんが、何を指摘することはできません。これをさらにデバッグしたり、問題を解決したりする方法はありますか?
誰かがクエリを求めました:
データ アクセス層:
public static List<Thing> GetAllThings(string[] Include = null)
{
using (Entities ctx = new Entities())
{
if ((Include != null) && (Include.Length > 0))
{
System.Data.Entity.DbSet<Thing> things= ctx.Things;
System.Data.Entity.Infrastructure.DbQuery<Thing> thingQuery= things.Include(Include[0]);
for (int i = 1, c = Include.Length; i < c; i++)
thingQuery= thingQuery.Include(Include[i]);
return thingQuery.ToList();
}
return ctx.Things.ToList();
}
}
コントローラーで:
public ActionResult Index()
{
string[] include = new string[] { "Stuff1.Stuff2", "Stuff4.Stuff5.Stuff6", "Stuff7.Stuff8" };
List<Things> things = ThingsManager.GetAllThings(include).OrderBy(x => x.Name).ToList();
return this.View(things);
}