加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – MVC – 视图中的多个模型

发布时间:2020-12-16 03:59:02 所属栏目:asp.Net 来源:网络整理
导读:我正在使用MVC(第一次)使用Entity框架,数据库优先 我想要做的是在单个视图中显示数据库中的数据.我首先创建了数据库,然后根据包含所有表的数据库创建了一个ADO.NET实体数据模型.然后我创建了一个使用我的实体数据模型作为模型强类型的索引视图. 在我的索引中
我正在使用MVC(第一次)使用Entity框架,数据库优先

我想要做的是在单个视图中显示数据库中的数据.我首先创建了数据库,然后根据包含所有表的数据库创建了一个ADO.NET实体数据模型.然后我创建了一个使用我的实体数据模型作为模型强类型的索引视图.

在我的索引中,我有顶部

@model IEnumerable<Forum6.Models.Forum>

这允许我从我的数据库中获取表“论坛”中的行.如果我尝试添加额外的模型,我得到运行时收到此错误消息:

06001

Parser Error Message: Only one ‘model’ statement is allowed in a file.

在找到答案后,我发现了这个: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);
    }
}

然后使用ViewModel作为模型的新强类型视图替换旧的Index视图.其中包含:

@model IEnumerable<Forum6.Models.ViewModel>

试图运行这个给我这个错误:

The model item passed into the dictionary is of type ‘Forum6.Models.ViewModel’,but this dictionary requires a model item
of type
‘System.Collections.Generic.IEnumerable`1[Forum6.Models.ViewModel]

如何让“ViewModel”变得强大?或者我的错误在其他地方?

解决方法

您需要更改@model IEnumerable< Forum6.Models.ViewModel>到@model Forum6.Models.ViewModel,因为你将IEnumerables包装在一个ViewModel中.

一个好的经验法则是在ViewModel和View之间建立1:1的关系.

这可能是一个很好的阅读:http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/(如果你不想去那条路线,只需忽略automapper部分)

您还需要在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; }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读