我有两种视图模型:
public class MasterPageViewModel
{
public string Meta { get; set; }
}
public class Entry : MasterPageViewModel
{
public int EntryID { get; set; }
public string Title { get; set; }
public DateTime PubDate { get; set; }
}
索引页面返回一个条目列表,因此在视图中包含:
...Inherits="System.Web.Mvc.ViewPage<IEnumerable<bl.Models.Entry>>"
然后母版页包含
...Inherits="System.Web.Mvc.ViewMasterPage<bl.Models.MasterPageViewModel>"
这是我得到的错误:
传递到字典中的模型项的类型为'System.Linq.EnumerableQuery`1 [bl.Models.Entry]',但此字典需要类型为'bl.Models.MasterPageViewModel'的模型项。
我可以通过在母版页上使用ViewData字典轻松绕过该错误,但在我的情况下,我更喜欢强类型方法。将来,我希望能够添加主页上显示的类别和标签列表。
答案 0 :(得分:1)
我有一些类似你在我正在研究的MVC网站中描述的结构。我没有找到一个非常令人满意的答案 - 在许多情况下,你觉得你想要两个不同的模型,一个用于母版页,一个用于内容页面。不幸的是,这不是MVC的工作方式。
除了你提到的ViewData选项之外,我只遇到过一个解决方案。
基类
所以在你的情况下,你最终会得到类似......
的东西public class MasterPageViewModel {
public string Meta { get; set; }
}
public class Entry : MasterPageViewModel {
public IEnumerable<bl.Models.EntryItem> Items {get; set }
}
public class EntryItem{
public int EntryID { get; set; }
public string Title { get; set; }
public DateTime PubDate { get; set; }
}
您的索引页面看起来像......
...Inherits="System.Web.Mvc.ViewPage<bl.Models.Entry>"
这是一种痛苦的屁股,因为你最终得到了很多小模特。然而,一旦我习惯了它,我就不再考虑它了。
HTH,
-Eric