[英]MVC - Multiple models in a view
我第一次使用MVC和Entity Framework,首先使用Database
我要做的是在單個視圖中顯示數據庫中的數據。 首先創建數據庫,然后從包含所有表的數據庫中創建一個ADO.NET實體數據模型。 然后,我創建了一個索引視圖,該視圖使用實體數據模型作為模型進行了強類型化。
在我的索引中,我位於頂部
@model IEnumerable<Forum6.Models.Forum>
這使我可以從數據庫中的“論壇”表中獲取行。 如果嘗試添加額外的模型,則會在運行時收到以下錯誤消息:
Line 1: @model IEnumerable<Forum6.Models.Forum> Line 2: @model2 IEnumerable<Forum6.Models.Post>
解析器錯誤消息:文件中僅允許一個'model'語句。
搜索答案后,我發現了這一點: 在ASP MVC 3的一個視圖中有兩個模型答案是創建一個包含所有模型(表)的ViewModel(ParentModel)。 這是我創建的ViewModel:
public class ViewModel
{
public IEnumerable<Forum6.Models.Forum> Forum { get; set; }
public IEnumerable<Forum6.Models.Post> Post { get; set; }
public IEnumerable<Forum6.Models.Topics> Topics { get; set; }
public IEnumerable<Forum6.Models.Users> Users { get; set; }
public IEnumerable<Forum6.Models.PrivMsg> PrivMsg { get; set; }
public IEnumerable<Forum6.Models.Permission> Permission { get; set; }
}
我編輯了控制器,使其看起來像這樣:
public class HomeController : Controller
{
// ForumDBEntities old_db = new ForumDBEntities();
ViewModel db = new ViewModel();
public ActionResult Index()
{
return View(db);
}
}
然后將舊的Index視圖替換為使用ViewModel作為模型的新的強類型視圖。 其中包含:
@model IEnumerable<Forum6.Models.ViewModel>
嘗試運行此操作會給我這個錯誤:
傳遞到詞典中的模型項的類型為'Forum6.Models.ViewModel',但是此詞典需要模型類型為'System.Collections.Generic.IEnumerable`1 [Forum6.Models.ViewModel]
如何使“ ViewModel”可枚舉? 還是我的錯誤在其他地方?
在將@model IEnumerable<Forum6.Models.ViewModel>
包裝在單個ViewModel中時,需要將@model IEnumerable<Forum6.Models.ViewModel>
更改為@model Forum6.Models.ViewModel
。
一個好的經驗法則是在ViewModel和View之間建立1:1關系。
這可能對您來說是一本好書: http : //lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/ (如果不想,請忽略自動映射器部分走那條路)
您還需要在ViewModel中放入實際數據,因為
ViewModel db = new ViewModel();
public ActionResult Index()
{
return View(db);
}
只會給您的視圖一個空的ViewModel。 一種方法是。
public ActionResult Index()
{
var model = new ViewModel
{
Forum = db.GetForum(),
Post = db.GetPost(),
Topic = you get the idea
};
return View(model);
}
通常,在命名屬性或變量時,最后一件事是當包含列表時應使用復數動詞。 因此,您的ViewModel將會是。
public class ViewModel
{
public IEnumerable<Forum6.Models.Forum> Forums { get; set; }
public IEnumerable<Forum6.Models.Post> Posts { get; set; }
public IEnumerable<Forum6.Models.Topics> Topics { get; set; }
public IEnumerable<Forum6.Models.Users> Users { get; set; }
public IEnumerable<Forum6.Models.PrivMsg> PrivMsgs { get; set; }
public IEnumerable<Forum6.Models.Permission> Permissions { get; set; }
}
當您傳遞ViewModel
類的單個實例而不是它們的集合時,請將@model IEnumerable<Forum6.Models.ViewModel>
更改為@model Forum6.Models.ViewModel
。
您的所有集合都在視圖模型的單個實例中傳遞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.