2011-03-21 81 views
1

我的難處是如何使用ViewBagDropdownListFor難以使用ASP.NET MVC ViewBag和DropDownListfor

在我的控制,我有:

TestModel model = new TestModel(); 
ViewBag.Clients = model.Clients; 
ViewBag.StatusList = model.StatusList; 
ViewBag.enumStatus = model.enumStatus; 
ViewBag.intClient = model.intClient; 

在我TestModel

public SelectList Clients { get; set; }  
public SelectList StatusList { get; set; } 
public ActiveStatus enumStatus { get; set; } 
public int? intClient { get; set; } 

在我看來

我想用DropDownListFor顯示ViewBag值,我該怎麼辦那?

回答

2
@Html.DropDownListFor(x => x.intClient, new SelectList(Model.Clients, "ClientId", "ClientName"), string.Empty); 

ClientId是下拉選項的值。

ClientName是下拉選項的文本。

string.Empty最後在下拉列表中添加了一個空白條目。

+0

我使用ViewBag傳遞的價值觀,在這裏that's難度 – learning 2011-03-22 05:59:39

+0

如何使用ViewBag值來填充dropdownlistfor? – learning 2011-03-22 06:14:28

+0

與IEnumerable完美結合 ...我使用ViewBag傳遞值並且像魅力一樣工作。謝謝! – Equiman 2015-11-03 04:09:43

10

你可以這樣做:

@Html.DropDownListFor(x => x.intClient, ViewBag.Clients) 

但我會建議你避免ViewBag /的ViewData和利潤從您的視圖模型:

public ActionResult Index() 
{ 
    var model = new TestModel(); 
    model.Clients = new SelectList(new[] 
    { 
     new { Value = "1", Text = "client 1" }, 
     new { Value = "2", Text = "client 2" }, 
     new { Value = "3", Text = "client 3" }, 
    }, "Value", "Text"); 
    model.intClient = 2; 
    return View(model); 
} 

,並在視圖:

@Html.DropDownListFor(x => x.intClient, Model.Clients) 
+2

我不能使用@ Html.DropDownListFor(x => x.intClient,ViewBag.Clients),因爲intClient是一個ViewBag屬性,我不能使用ViewBag.intClient – learning 2011-03-22 09:25:24

+0

這是一個好主意,但我會問(而真正的問題不是一個批評)那麼你不是冒着讓你的視圖模型膨脹的選擇列表很多的風險嗎?例如,如果您的模型有20個屬性,每個屬性都從選擇列表中獲取其信息,那麼您的模型中有20個選擇列表?如果在其他地方需要那些相同的20個選擇列表(或更多/更少),那麼你會不會冒着所有模型的風險,我的意思是,如果你所做的只是在模板上顯示模型(僅用於讀取)那麼總是承擔那個開銷? – djack109 2017-07-06 08:59:06

9

個人...我創建一個列表並執行此操作。

public ActionResult SomeAction() 
{ 
    var list = new List<SelectListItem>(); 
    list.Add(new SelectListItem(){Text = "One", Value="One"}); 
    list.Add(new SelectListItem(){Text = "Two", Value="Two"}); 
    list.Add(new SelectListItem(){Text = "Three", Value="Three"}); 
    list.Add(new SelectListItem(){Text = "Four", Value="Four"}); 

    ViewBag.Clients = list; 

    return View(); 
} 

,然後在你的看法......

@Html.DropDownListFor(x => x.SomePropertyOnModel, (IEnumerable<SelectListItem>)ViewBag.Clients); 

通知上Viewbag項目投。演員陣容是必需的,因爲視頻包不知道對象是什麼Viewbag.Client。所以在那裏演員是必需的。

+0

這是一個很酷的答案,很好的工作和謝謝。 – user1477388 2013-05-04 21:44:03