C# ViewModel MVC 5使用2个类创建,控制器使用它

C# ViewModel MVC 5使用2个类创建,控制器使用它,c#,asp.net-mvc,C#,Asp.net Mvc,这不是一个新的话题,然而,即使在阅读了其中的许多内容之后,我仍然不完全理解如何在我的案例中实现它们。我在找你的建议 我有两节课 public class Media { public int Id { get; set; } public string title { get; set; } public string description { get; set; } public string body { get; s

这不是一个新的话题,然而,即使在阅读了其中的许多内容之后,我仍然不完全理解如何在我的案例中实现它们。我在找你的建议

我有两节课

public class Media
    {
        public int Id { get; set; }
        public string title { get; set; }
        public string description { get; set; }
        public string body { get; set; }
        public string ImagePath { get; set; }
    }

目前,我有两个控制器,分别用于
MediasController
videoscocontroller
,每个控制器都使用
MediaMain
视图和
VideoMain
视图。结果,我可以在两个单独的视图上显示两个对象。我们谈论的是一种媒体博客网站,新闻可能有所不同,它们可能是纯文本、文本+图像或文本+视频。每个新的“媒体”都应该在一个视图中填充

如果我们是在高层次上讨论,我想我应该创建一个新的viewModel类来收集我需要在viewModel页面上显示的字段,对吗?以下是我所拥有的:

public class MediaViewModel
    {
        public class Media 
        { 
                public string title { get; set; }
                public string description { get; set; }
                public string body { get; set; }
                public string ImagePath { get; set; }
        }
        public class Video 
        {
            public string Title { get; set; }
            public string Description { get; set; }
            public string VideoLink { get; set; }
        }
}
现在,如果正确的话,我应该用这个类制作一个ViewModelController,对吗?或者我需要两个类的集合? 我的意思是这样的:

public class MediaViewModel
        {
            public class Media 
            { 
                    public string title { get; set; }
                    public string description { get; set; }
                    public string body { get; set; }
                    public string ImagePath { get; set; }

                    **public Video Video{ get; set; }**
            }
    }
public class MediaViewModel
{
   public Media media { get; set; }
   public Video video { get; set; }
}

请提供帮助。

您所处的轨道是正确的,但您的类定义应如下所示:

public class MediaViewModel
        {
            public class Media 
            { 
                    public string title { get; set; }
                    public string description { get; set; }
                    public string body { get; set; }
                    public string ImagePath { get; set; }

                    **public Video Video{ get; set; }**
            }
    }
public class MediaViewModel
{
   public Media media { get; set; }
   public Video video { get; set; }
}

你应该建造这个。这是最好的做法

public MediaViewModel()
    {
        Foo = new List<Media>();
        FooVideo = new List<Video>();
    }
    public IList<Media> Foo { get; set; }
    public IList<Video> FooVideo { get; set; }
在您使用razor引擎的视图中,您可以使用如下示例

@model TestMVC.ViewModels.MediaViewModel

 @foreach (var item in Model.Foo)
{
    <p>@item.title</p>
    <p>@item.ImagePath</p>
    <p>@item.body</p>
    <p>@item.description</p>    
}
@model TestMVC.ViewModels.MediaViewModel
@foreach(Model.Foo中的var项)
{
@项目名称

@item.ImagePath

@项目.正文

@项目说明

}
最后你会得到这样的结果。

合成类具有属性
公共类MediaViewModel{public Media Media{get;set;}公共视频{get;set;}}
。当您开始讨论集合时,您需要考虑每个项目与其他集合的关系。通常没有VIEW模型控制器。但是,您可以创建一个“媒体”控制器。viewmodel只是用于保存数据的容器。下面Sparrow的回答是正确的。谢谢大家!是的,这使事情变得更加清楚。这个问题的解决方法是感谢大家的帮助!是的,这正是我想要的,非常感谢,我将尽快测试它!祝你好运。请在测试后分享您的测试结果。1。当我创建这个新的“媒体”时,我需要基于ViewModel创建、更新、删除VEW,还是使用standart EF单独创建视图?2.您展示了访问参数Model.FooVideo.Description的这种方式,但我认为我需要使用循环来遍历对象的所需参数,不是吗?也许我需要这样的东西:@foreach(ViewBag.video中的var video){}?1)viewmodels只是模型之间视图的抽象。您的表格必须基于视频和图像类。2) 是的,你是对的,你应该像foreach一样使用循环。您可以轻松使用viewbag。如果您坚持使用模型,您应该在viewmodel中使用IEnumerable media and video类,如下面的公共列表中所示。请给我举个例子好吗?我想不出眼前发生了什么。