我正在使用MVC 4、LINQ to SQL和Razor语法创建一个C#应用程序。
我创建了一个类,它根据请求的id获取数据库中给定行的内容。
我做了一个控制器,它有一个获取和发布处理程序。我基于其中一个模型类创建了一个强类型视图,一切都很好。数据被检索并显示在表单中。数据可以更新和提交。
问题是下降。我不希望它显示id的文本字段。我想要下拉列表。我有大约五个下拉列表,都是从数据库中生成的。我创建了模型来创建它们。
我可以使用ViewData或ViewBag毫无问题地传递下拉列表。但是,当用户加载页面时,我如何选择所选的选项?
MVC中的"模型"应该为页面建模,而不是为数据建模。如果您的页面上有下拉列表,那么您的模型上应该有一个表示选择的某种集合(可能是List<T>
),以及另一个表示所选值的属性。此属性将用于填充下拉列表的初始值,并将所选值发送回控制器。
我建议避免使用ViewData或ViewBag,而使用ViewModel。
ViewModel本质上是一个混合模型,它将视图所需的所有数据聚合到一个实体中。与将视图键入到模型中并传递视图所需的附加信息(该信息不在ViewData或ViewBag中的模型中)不同,您在将视图键入的模型中拥有所需的一切。
在您的情况下,ViewModel可能看起来像这样:
public class MyViewModel
{
public DropDown1 DropDownA { get; set; }
public DropDown2 DropDownB { get; set; }
public Model ModelData { get; set; }
}
public class DropDown1
{
public int SelectedValue { get; set; }
public List<T> DropDownValues { get; set; }
}
public class DropDown2
{
public int SelectedValue { get; set; }
public List<T> DropDownValues { get; set; }
}
您的视图将键入MyViewModel
。此时,将下拉列表的数据源设置为ViewModel中的下拉列表并设置SelectedValue将是微不足道的。