2011-03-21 78 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