MVC使用DropDownLists编辑页面



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

例如,假设有一个用户的个人资料中性别等于男性,种族是高加索。可能的性别选择是男性、女性(我知道更多,我不想搞政治),种族是高加索、非裔美国人、拉丁人等。我想通过用户,但也要通过可能的选择列表。

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

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

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

奖金问题:

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

谢谢!

4) 我是否总是必须创建一个viewModel(dto),或者我可以直接传递实体框架对象直接指向视图。我首先使用代码poco类。

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

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

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

2) 如何在下拉列表中创建选项,然后选择与配置文件对象匹配的选项?我应该通过整个考试吗在保存实体时查看模型,即使有可能的选择包括在内?

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

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

在你的行动方法

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个下拉菜单会让用户有点不高兴,因为它会非常复杂。您可以考虑某种向导方法,当用户单击"下一步"按钮时,您将隐藏并显示您的个人资料信息的某些部分。

最新更新