我正在使用ASP.NET MVC 3和Entity Framework开发多层。我有一个名为“Site”的实体属于域层。可以直接在域实体视图模型和视图中提及吗?
视图模型
public IList <Domain.Entities.Site> Sites;
查看
foreach (var item in Model.Sites)
{
...
}
答案 0 :(得分:4)
通常不是。 ViewModel的要点是仅抽象模型所需的信息。
您应该拥有一个也与Site模型相对应的ViewModel。
所以你会:
// assuming the Domain model is what we're talking about
public class DomainViewModel
{
public IList<SiteViewModel> Sites { get; set; }
}
答案 1 :(得分:2)
我认为在您的视图中引用域实体是完全可以接受的。如果您不需要为视图转换域实体中的任何信息,那么使用ViewModel将其抽象化是多余的。
正如您可能会发现对此主题有不同的看法,但它真正归结为是否抽象出域名实体是否正在增加任何价值。创建一个ViewModel将增加一些未来的灵活性,也许对你来说,这足以证明它是合理的。如果是这种情况,那么一定要这样做。但是不要因为害怕违反MVC而感到害怕。
答案 2 :(得分:0)
直接绑定到模型是一个短期解决方案。最好让viewmodel包装你的模型,以防你需要绑定到与模型无直接关系的其他属性。即bool CanDelete,bool IsEnabled ......
答案 3 :(得分:0)
一般来说,没有。
如果这是QUICK和BASIC应用程序,那么不情愿确定。
除了你自己在脚下拍摄的一切,普遍接受的模式是使用ViewModels来保存你需要的所有数据(包括SelectList数据等,而不是使用ViewBag。
Btw在ViewBag上,也避免这样做: http://completedevelopment.blogspot.com/2011/12/stop-using-viewbag-in-most-places.html