我的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来填充列表?
答案 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将其传递给视图。