[英]MVC Many to Many View
我的項目再次出現問題。 我有兩個使用EF 5 DBContext Generator創建的模型:
第一:
public int ID_AN { get; set; }
public string TITLE_OR { get; set; }
public string TITLE_EN { get; set; }
public virtual ICollection<GENRES> GENRES { get; set; }
第二:
public int ID_GE { get; set; }
public string GENRE { get; set; }
public virtual ICollection<ANIME> ANIME { get; set; }
之后我創建了控制器:
public ActionResult Details(int id)
{
using (var db = new MainDatabaseEntities())
{
return View(db.ANIME.Find(id););
}
}
並查看:
@model AnimeWeb.Models.ANIME
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<fieldset>
<legend>ANIME</legend>
<div class="display-label">
@Html.DisplayNameFor(model => model.TITLE_OR)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.TITLE_OR)
</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.TITLE_EN)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.TITLE_EN)
</div>
</fieldset>
到目前為止一切正常,但我想顯示所選動漫的所有類型。 當我嘗試添加
<div>
@Html.DisplayFor(model => model.GENRES)
</div>
我收到一個錯誤:“ObjectContext實例已被釋放,不能再用於需要連接的操作。”
我是MVC的新手,所以如果有人能向我解釋如何讓它成功,我將非常感激。
實際上這是一個實體框架問題。 離開Controller后,你來不及要查詢數據庫。 實體框架是延遲加載(也就是按需)的類型。 要解決此問題,您應該更改查詢以在檢索Anime對象時顯式加載類型。
更新:從未告訴你如何做到這一點。 有許多方法可以明確地或急切地加載你的類型。 最好的資源是閱讀加載相關實體的MSDN頁面 。 一種方法是在控制器中添加與以下類似的代碼(我認為這與你如何設置它有關)。
public ActionResult Details(int id)
{
using (var db = new MainDatabaseEntities())
{
var anime = db.ANIME.Find(id);
db.Entry(anime).Collection(a => a.GENRES).Load();
return View(anime);
}
}
您可以使用“include”擴展方法來加載GENRES,如下所示:
db.ANIME.Include("GENRES").Find(id)
如果你想使用@Html.DisplayFor(model => model.GENRES)
顯示所有的類型,你可以使用DisplayTemplates,檢查這個ASP.NET MVC顯示和編輯器模板 。
考慮在初始化控制器時初始化上下文,並將其置於控制器的dispose方法中。
這是Visual Studio中模板使用的模式(順便提一下)。
public class DemoController : Controller
{
private MainDatabaseEntities db = new MainDatabaseEntities();
public ActionResult Details(int id)
{
return View(db.ANIME.Find(id));
}
protected override void Dispose(bool disposing)
{
this.db.Dispose();
base.Dispose(disposing);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.