在ASP.NET MVC 2中实现DropDownList的最佳方式?
我想了解在ASP.NET MVC 2中使用DropDownListFor
帮助程序实现DropDownList
的最佳方式。这是一个多部分问题。在ASP.NET MVC 2中实现DropDownList的最佳方式?
首先,将列表数据传递给视图的最佳方式是什么?
- 合格名单在你的模型包含数据
- 一个
SelectList
财产转至通过ViewData
我如何在DropDownList
空值列表?我是否应该在创建时将其构建到SelectList
中,或者是否有其他方法可以告诉帮助程序自动创建空值?
最后,如果由于某种原因存在服务器端错误,我需要重新显示屏幕DropDownList
,我是否需要再次获取列表值以传入视图模型?这些数据不会在帖子之间维护(至少在我通过视图模型传递的时候不会),所以我只需要再次获取它(缓存)。我正确地处理这个问题吗?
最好的办法是建立在你的控制器中的SelectList - 用我的扩展方法在这里: ViewData["statusid"]=MySelectList
然后只需使用:即到的ViewData使用相同的密钥为您的属性名称 http://blog.wekeroad.com/2010/01/20/my-favorite-helpers-for-aspnet-mvc
流行Html.DropDownFor(x=>x.StatusID)
,你全都准备好了。
(你知道这个了!)
- 与包含数据
是,添加它,当你建立了一个的SelectList属性的SelectList传递模型中的列表。 (如果你使用LINQ构建列表,Union可能会派上用场。)
是的,你是。
接听零件:
-
的最佳方式恕我直言,是通过在
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
的一部分,则必须再次获取/填充列表。
看看下面的博客文章。它可以给你一些提示:
你可以这样做:
<%= Html.DropDownListFor((x => x.ListItems), Model.ListItems, "")%>
或
<%= Html.DropDownList("ListItems", Model.ListItems, "")%>
最后PARAM 'optionLabel' 让一个空白列表项
在这种情况下,您可以看到ListItems是模型的一个属性。
我也强制类型化视图模型。
我发现使用一系列SelectListItems(而不是SelectList)更直观。
例如,这会从客户对象序列创建IEnumerable<SelectListItem>
,您可以将其传递给Html.DropDownListFor(...)助手。 'Selected'属性可以选择在下拉列表中设置默认项目。
var customers = ... // Get Customers
var items = customers.Select(c => new SelectListItem
{
Selected = (c.Id == selectedCustomerId),
Text = c.Email,
Value = c.Id.ToString()
});
使用ViewData时遇到的问题是它使您的控制器难以测试。如果你把所有东西放在ViewModel中,你的测试会更好。 – Mac 2010-04-30 00:17:07
实际上并没有什么不同 - 使用ViewModel你必须拼出ViewData.Model,否则你只需要用一个键来请求它。没有区别... – 2010-06-02 03:55:09
http://stackoverflow.com/a/5177332/986862 – 2013-12-11 12:21:42