严格打印视图中的下拉菜单

时间:2013-02-04 17:25:10

标签: c# asp.net-mvc linq razor asp.net-mvc-4

我正在使用MVC 4,LINQ to SQL和Razor语法创建一个C#应用程序。

我创建了一个类,它根据请求的id获取db中给定行的内容。

我制作了一个具有get和post处理程序的控制器。我基于其中一个模型类创建了一个强类型视图,一切都很好。检索数据并在表单中显示。数据可以更新和提交。

问题是下拉菜单。我不希望它显示id的文本字段。我想要下拉菜单。我有大约五个下拉列表,都是从数据库中生成的。我已经创建了模型来创建它们。

我可以使用ViewData或ViewBag传递下拉列表,没有任何问题。但是,当用户加载页面时,如何选择所选选项?

2 个答案:

答案 0 :(得分:2)

&#34;模型&#34;在MVC中应该模拟页面,而不是你的数据。如果您的页面上有下拉列表,那么您的模型上应该有一个代表选择的某种集合(可能是List<T>),以及表示所选值的另一个属性。此属性将用于填充下拉列表的初始值,并将所选值发送回控制器。

答案 1 :(得分:1)

我建议避免使用ViewData或ViewBag而使用ViewModel

ViewModel本质上是一个混合模型,它将您的View所需的所有数据聚合到一个实体中。而不是将视图键入到模型中并传递View中所需的其他信息(不在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将是微不足道的。