使用DropDownLists进行MVC编辑页面

时间:2015-12-30 16:12:58

标签: c# asp.net .net asp.net-mvc entity-framework

我对MVC框架比较陌生,所以我很确定这是一个容易回答的问题。我想为具有大量下拉列表的用户配置文件创建一个编辑页面。我认为最好的方法是创建一个名为 ProfileViewModel 的视图模型,该视图模型有一个对象来表示我要编辑的配置文件,即实体的具体值和然后是一堆IList类型的属性,用于包含配置文件中每个属性的可能值。

例如,假设有一个用户的个人资料与男性相同且种族是白种人。性别的可能选择是男性,女性(我知道更多,我没有试图获得政治)和种族是高加索人,非裔美国人,拉丁语等。我想通过用户,但也列出了可能的选择。

1)我有15个清单。最佳做法是在一个视图模型中发送所有这些模型,还是应该为每个下拉列表分成部分视图?

2)如何在下拉列表中创建选项,然后选择与配置文件对象匹配的选项?即使包含可能的选项,我是否应该在保存实体时传回整个视图模型?

3)我是否应该为创建和编辑页面提供不同的视图。唯一的区别是在编辑页面中我需要在与配置文件对象相对应的下拉列表中选择值。

奖金问题:

4)我是否总是要创建一个viewModel(dto),或者我可以直接将实体框架对象传递给视图。我先使用代码poco class。

谢谢!

1 个答案:

答案 0 :(得分:1)

  

4)我是否总是要创建一个viewModel(dto)或者我可以通过   实体框架对象直接到视图。我先使用代码   poco class。

将您的ORM边实体混合在UI层中使用并不是一个好主意。最佳做法是创建一个单独的视图模型特定于视图

  

3)我是否应该为创建和编辑页面提供不同的视图。该   唯一不同的是我需要选择的编辑页面   与配置文件对象对应的下拉列表中的值。

这取决于你。但您可以考虑创建包含在创建和编辑视图中的部分视图。一个局部视图可以包含所有文本输入,第二个可以具有下拉列表(如果可以在视图中将所有下拉列表组合在一起)。

  

2)如何在下拉列表中创建选项,然后选择   与配置文件对象匹配的选择?我应该通过整个   即使有可能的选择,在保存实体时也会返回viewmodel   包括?

视图模型中将有另一个属性来保存选定的值。当使用此属性和DropDownListFor的正确重载时,您将能够在下拉列表中选择一个选项

public class EditProfileVm
{
  public List<SelectListItem> Genders { set;get;}
  public string SelectedGender {set;get;}
}

在你的Action方法中

public ActionResult Edit(int id)
{
  var vm = new EditProfieVm();
  vm.Genders = new List<SelectListItem> { 
         new SelectListItem { Value="M", Text="Male"},
         new SelectListItem { Value="F", Text="FeMale"}
        };
  vm.SelectedGender="F";  //Set the selected option here
  return View(vm);
}

在你看来

@model EditProfileVm
@Html.DropDownListFor(s=>s.SelectedGender,Model.Genders)
  

1)我有15个清单。最佳做法是将所有这些发送到一个   查看模型还是应该为每个下拉列表分成部分视图?

完全取决于您的使用案例/要求,在视图模型中发送15个下拉列表没有任何问题。但是,在UI中看到15次下降将使用户有点不高兴,因为它会如此复杂。您可以考虑某种向导方法,在用户点击下一步按钮时,您将隐藏并显示您的个人资料信息的一部分。