我试图了解使用DropDownList
帮助器在ASP.NET MVC 2中实现DropDownListFor
的最佳方法。这是一个多部分的问题。
首先,将列表数据传递给视图的最佳方法是什么?
SelectList
属性ViewData
如何在DropDownList
中获取空白值?我应该在创建时将其构建到SelectList
中,还是有其他方法告诉帮助者自动创建空值?
最后,如果由于某种原因出现服务器端错误而我需要使用DropDownList
重新显示屏幕,是否需要再次获取列表值以传递到视图模型?帖子之间没有维护这些数据(至少当我通过我的视图模型传递它时),所以我只是再次获取它(它被缓存)。我能正确地解决这个问题吗?
答案 0 :(得分:9)
最好的办法是在Controller中创建一个SelectList - 在这里使用我的扩展方法: http://blog.wekeroad.com/2010/01/20/my-favorite-helpers-for-aspnet-mvc
使用与您的属性名称相同的键将其弹出到ViewData中:
ViewData["statusid"]=MySelectList
然后只需使用Html.DropDownFor(x=>x.StatusID)
就可以了。
答案 1 :(得分:3)
部分回答:
恕我直言的最佳方式是通过ViewModel
这样的列表:
public SelectList Colors
{
get
{
// Getting a list of Colors from the database for example...
List<Color> colors = GetColors().ToList();
// Returning a SelectList to be used on the View side
return new SelectList(colors, "Value", "Name");
}
}
要获得像( - 选择颜色 - )这样的空白或默认选项,您可以在视图方面执行此操作:
@Html.DropDownListFor(m => m.Color, Model.Colors, "-- Pick a color --")
如果列表是ViewModel
的一部分,则必须再次获取/填充列表。
查看以下博客文章。它可以给你一些提示:
答案 2 :(得分:2)
您可以执行以下操作:
<%= Html.DropDownListFor((x => x.ListItems), Model.ListItems, "")%>
或
<%= Html.DropDownList("ListItems", Model.ListItems, "")%>
最后一个参数'optionLabel'创建一个空白列表项
在这种情况下,您可以看到ListItems是模型的属性。
我也强烈地将视图输入到模型中。
答案 3 :(得分:0)
(你已经知道了!)
是的,在构建SelectList时添加它。 (如果使用LINQ构建列表,Union可能会派上用场。)
是的,做的,是的。
答案 4 :(得分:0)
我发现使用一系列SelectListItems(而不是SelectList)更直观。
例如,这将从一系列客户对象创建一个IEnumerable<SelectListItem>
,您可以将其传递给Html.DropDownListFor(...)帮助程序。 “已选择”属性可选择在下拉列表中设置默认项目。
var customers = ... // Get Customers
var items = customers.Select(c => new SelectListItem
{
Selected = (c.Id == selectedCustomerId),
Text = c.Email,
Value = c.Id.ToString()
});