我正在研究MVC3 Web应用程序.我想要一个从应用程序管理系统编辑blo时显示的类别列表.在我的viewmodel中,我为类别的selectlistitems列表定义了以下属性.
/// <summary>
/// The List of categories
/// </summary>
[Display(Name = "Categorie")]
public IEnumerable<SelectListItem> Categories { get; set; }
Run Code Online (Sandbox Code Playgroud)
下一步,我的控制器包含以下编辑操作,其中从数据库中填充selectlistitems列表.
public ActionResult Edit(Guid id)
{
var blogToEdit = _blogService.First(x => x.Id.Equals(id));
var listOfCategories = _categorieService.GetAll();
var selectList = listOfCategories.Select(x =>new SelectListItem{Text = x.Name, Value = x.Id.ToString(), Selected = x.Id.Equals(blogToEdit.Category.Id)}).ToList();
selectList.Insert(0, new SelectListItem{Text = Messages.SelectAnItem, Value = Messages.SelectAnItem});
var viewModel = new BlogModel
{
BlogId = blogToEdit.Id,
Active = blogToEdit.Actief,
Content = blogToEdit.Text,
Title = blogToEdit.Titel,
Categories = selectList …Run Code Online (Sandbox Code Playgroud) 我有一个项目,其中ViewModels彼此嵌套,这样它们本质上是域层次结构的字符串类型复制.例如,如果我们的域具有以下关系:
组织有1到多个环境
环境有1到多台机器
然后会有一个OrganizationViewModel,其中包含一个或多个EnvironmentViewModel,而EnvironmentViewModel本身就有一个到多个MachineViewModel.然后,在整个应用程序中重用此样式的层次结构,其中包含此类型的大约五个ViewModel之一.(例如,EnvironmentViewModel用于多个页面,MachineViewModel也适用于其中许多页面,具体取决于正在查看的层次结构的级别...我为了讨论的目的简化了这个,但是层次结构比上面的3更大).
现在,尽管我想从上面下来并谴责这种做法,但我还是找不到有关此问题的更多信息.有人能指出我有关既定做法的更多细节吗?轶事分享?
(我自己的偏见是这些ViewModel不应该以这种方式嵌套在彼此之内,并且ViewModel实际上应该对应于Views,而不是域对象.我发现它对于一些可维护性问题非常混乱.但我想要知道别人的想法或经历过.)