2013-02-22 146 views
0

我有一个下拉在我的MVC项目。Html.DropDownList填充

@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来填充列表吗?

回答

5

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

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

在你的控制器,拨打电话到您的数据源和填充视图模型的项目属性,并将其传递给视图。

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;" 
          }); 
2

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

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

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