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类,如下面的公共列表中所示。请给我举个例子好吗?我想不出眼前发生了什么。