Html.DropDownList填充

时间:2013-02-22 17:56:53

标签: asp.net-mvc asp.net-mvc-3 html-select

我的MVC项目中有一个下拉列表。

@Html.DropDownList("Chart Type", new List<SelectListItem>
    {
        new SelectListItem{ Text="Horizontal", Value = "Horizontal" }, 
        new SelectListItem{ Text="Vertical", Value = "Vertical" },
        new SelectListItem{ Text="Pie", Value = "Pie" }
    }, 
    new { @class = "chzn-select", @multiple ="true", @style="width:350px;"} )

这会将硬编码值放入列表中。 如果我想从数据库中获取值,最好的方法是什么?

我是否可以使用Html.DropDownList引用sql查询或SP来填充列表?

2 个答案:

答案 0 :(得分:5)

使用(至少)两个属性创建视图模型:

public class ViewModel()
{
   public List<SelectListItem> Items { get; set; }
   public string SelectedItem { get; set; }
}

在您的控制器中,调用您的数据源并填充视图模型的Items属性并将其传递给视图。

public ActionResult Index()
{
   var viewModel = new ViewModel();
   viewModel.Items = database.GetChartTypes();//or however you're accessing your data
   return View(viewModel);
}

然后强烈键入您的视图并使用DropDownListFor帮助程序

@model MyProject.ViewModel
...
@Html.DropDownListFor(m => m.SelectedItem, 
                      Items,
                      "--Select a Chart Type--",
                      new { @class = "chzn-select", 
                            @multiple ="true", 
                            @style="width:350px;"
                          });

答案 1 :(得分:2)

您不希望UI调用您的数据层。

你想要的是控制器要么调用“服务”然后调用存储库,要么控制器调用存储库来获取列表。

一旦有了列表,就会使用ViewModel或ViewBag将其传递给视图。