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

时间:2017-04-05 21:17:33

标签: 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; set; }
        public string ImagePath { get; set; }
    }

public class Video
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public string VideoLink { get; set; }
        public string tags { get; set; }
    }

目前我为每个MediasControllerVideosController设置了两个控制器,每个控制器都使用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; }**
            }
    }

请帮忙。

2 个答案:

答案 0 :(得分:4)

你走在正确的轨道上,除了你的班级定义应该是这样的:

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

答案 1 :(得分:0)

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

safeHandle.DangerousRelease();

您也可以在控制器中使用这样的

public MediaViewModel()
    {
        Foo = new List<Media>();
        FooVideo = new List<Video>();
    }
    public IList<Media> Foo { get; set; }
    public IList<Video> FooVideo { get; set; }

在使用剃须刀引擎查看时,您可以使用此示例。

public ActionResult About()
    {
        ViewBag.Message = "Your application description page.";

        var model = new MediaViewModel();
        model.Foo.Add(new Models.Media
        {
            body = "test body",
            description = "description",
            ImagePath = "../path/path",
            title = "this title"
        });
        return View(model);            
    }

最后你会得到这样的东西。 Viewmodel print