Asp.net 我是否需要ViewModel将一对多数据带到视图中?
这可能是最基本的东西,但我在任何地方都找不到明确的答案 假设我正在使用实体框架(EF4)开发一个MVC(3)应用程序,我有以下三个类:Asp.net 我是否需要ViewModel将一对多数据带到视图中?,asp.net,entity-framework-4,asp.net-mvc-3,Asp.net,Entity Framework 4,Asp.net Mvc 3,这可能是最基本的东西,但我在任何地方都找不到明确的答案 假设我正在使用实体框架(EF4)开发一个MVC(3)应用程序,我有以下三个类: public class Foo { public int FooID public Bar Bar public ICollection<Baz> Bazes } public class Bar { public int BarID public string BarText } public clas
public class Foo
{
public int FooID
public Bar Bar
public ICollection<Baz> Bazes
}
public class Bar
{
public int BarID
public string BarText
}
public class Baz
{
public int BazID
public Foo Foo
}
公共类Foo
{
公共整数FooID
公共酒吧
公共集市
}
公共类酒吧
{
公共国际巴里德酒店
公共字符串
}
公共类Baz
{
巴齐德公共酒店
公共福福
}
最好的方法是什么,将所有的Foo与相关的酒吧Baz结合起来,这样我就可以循环浏览Foo并利用相关的物品?我需要制作ViewModel吗?它应该包含什么
我想要的结局是
@model = IEnumerable<Foo/FooViewModel>
foreach(var foo in model)
{
@if(foo.Bar.BarID == 1)
{
foreach(var baz in foo)
{
@baz.BazID
}
}
}
@model=IEnumerable
foreach(模型中的var foo)
{
@如果(foo.Bar.BarID==1)
{
foreach(foo中的var baz)
{
@baz.BazID
}
}
}
您并不特别需要视图模型。您可以将EF对象直接传递到视图,在简单的CRUD情况下也可以。以我的经验来说,它从来就不是那么简单的积垢
我通常需要从许多地方获取数据,这些数据并非全部包含在一个对象中。例如,我可能希望根据个人在系统中的角色显示/隐藏数据。福可能不知道。另一个例子是带有dropdownlist的表单。你需要把这些信息传递到某个地方。再说一次,富可能不知道应该有什么选择
我会为每个类创建一个视图模型,然后使用AutoMapper将域模型映射到视图模型
您的视图模型如下所示:
public class FooView{
public BarView Bar { get; set;}
public ICollection<BazView> Bazes { get; set;}
}
public class BarView{
public int BarID { get; set; }
public BazView Baz { get; set; }
}
public class BazView {
public int BazID { get; set; }
}
公共类视图{
公共BarView栏{get;set;}
公共ICollection Bazes{get;set;}
}
公共类BarView{
公共int BarID{get;set;}
公共视图Baz{get;set;}
}
公共类视图{
public int BazID{get;set;}
}
您的操作方法将包含以下内容:
var foos = fooRepository.GetFoos();
var model = Mapper.Map<IEnumerable<Foo>,IEnumerable<FooView>>(myFoos);
return View(model);
var foos=fooRepository.GetFoos();
var model=Mapper.Map(myFoos);
返回视图(模型);
您能否提供更多有关视图外观的详细信息。这是一个潜在的递归对象层次结构。好的,问题已更新,希望更清楚!)谢谢你的回答。看起来这个模型比我预期的要大一点,但它似乎是有效的!我越是关注MVC,它就越像MVVMC,是否有人只使用模型、视图和控制器?谢谢again@NiclasLindqvist您可以只使用您的EF模型,这对于简单的CRUD应用程序来说通常很好。我的经验是,它永远不会只是积垢。我编辑了我的答案,并详细介绍了我为什么使用视图模型。HTH@Brian不,你是对的,它从来就不是积垢。我会读到更多关于自动映射和所有这些的内容,但是谢谢你的帮助。@Brian。。BarView如何包含多个Baz?从我可以告诉你的视图模型,一个BarView有一个BazView,但我想在每个Foo(以及每个Bar)上有多个Baz,有什么想法吗?@Niclas Lindqvist你只对在这个视图上显示Baz感兴趣吗?我以为你不是,因为你把食物/酒吧递给它。但是,在进一步研究这个问题之后,您似乎只是在使用foo/bar来过滤baz'es。如果你对显示任何foo/bar信息不感兴趣,我会更新答案,告诉你我会怎么做。