【发布时间】:2013-02-27 22:14:09
【问题描述】:
我正在使用 MVC(第一次)和实体框架,数据库优先
我想做的是在单个视图中显示数据库中的数据。我首先创建了数据库,然后基于包含所有表的数据库创建了一个 ADO.NET 实体数据模型。然后我创建了一个索引视图,它使用我的实体数据模型作为模型进行强类型化。
在我的索引中,我在顶部
@model IEnumerable<Forum6.Models.Forum>
这允许我从我的数据库中的“论坛”表中获取行。如果我尝试添加额外的模型,我会在运行时收到此错误消息:
Line 1: @model IEnumerable<Forum6.Models.Forum> Line 2: @model2 IEnumerable<Forum6.Models.Post>解析器错误消息:文件中只允许有一个“模型”语句。
搜索答案后,我发现:Two models in one view in 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”可枚举?还是我的错误在别处?
【问题讨论】:
-
将 ViewModel 作为模型传递给您的视图:@model ViewModel
-
抱歉,忘记包含我的视图包含的内容。编辑了我的答案以包括在内。 "@model IEnumerable
" -
从我看到的情况来看,你确定你的视图模型应该是 IEnumerable 吗?由于里面的所有物品都是,就像你第一次尝试一样。
-
我从 ViewModel 中删除了“IEnumrable”,但仍然遇到同样的错误。我想我必须让控制器传递一个 Enumerable ViewModel,但我还没有弄清楚。
-
如何合并视图模型中的模型?你能发布那个代码吗
标签: asp.net-mvc entity-framework