0

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

4

2 回答 2

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;"
                          });
于 2013-02-22T18:05:37.650 回答
2

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

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

一旦获得列表,它将使用 ViewModel 或 ViewBag 将其传递给视图。

于 2013-02-22T18:02:24.567 回答