2013-02-22 144 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將它傳遞給視圖。