我想制定一个最佳实践,用于构建需要绑定到数据库中值的值的下拉框。Web框架下拉框(ASP.NET MVC/ROR /任何东西)的最佳实践
目前我将使用第3个答案从这个名单How do you create a dropdownlist from an enum in ASP.NET MVC?
但后来我想,如果我对枚举强烈地结合,然后想改变项目的顺序,或添加新项目,我需要确保枚举的顺序实际上并不是存储在数据库中的值,并且必须具有某种绑定层。
有没有人有与db有关的下拉列表工作的权威性方法?
我想制定一个最佳实践,用于构建需要绑定到数据库中值的值的下拉框。Web框架下拉框(ASP.NET MVC/ROR /任何东西)的最佳实践
目前我将使用第3个答案从这个名单How do you create a dropdownlist from an enum in ASP.NET MVC?
但后来我想,如果我对枚举强烈地结合,然后想改变项目的顺序,或添加新项目,我需要确保枚举的顺序实际上并不是存储在数据库中的值,并且必须具有某种绑定层。
有没有人有与db有关的下拉列表工作的权威性方法?
为列表提供强类型视图模型,并使用局部视图进行匹配。在控制器中执行操作,该控制器填充视图模型,然后将其返回到视图。无论您想要使用下拉列表,都可以在视图中插入部分视图。
我使用的扩展方法用于这个任务的粉丝:
public static List<SelectListItem> ToSelectList<T>(this IEnumerable<T> enumerable, Func<T, string> value, Func<T, string> text, string defaultOption)
{
var items = enumerable.Select(f => new SelectListItem()
{
Text = text(f) ,
Value = value(f)
}).ToList();
if (!string.IsNullOrEmpty(defaultOption))
{
items.Insert(0, new SelectListItem()
{
Text = defaultOption,
Value = "-1"
});
}
return items;
}
在你的控制器,你选择你wan't表示作为一个下拉中项目的数据。注意,在这个例子中,我从数据库中选择城市:
SomeModel.City =
(from l in _locationRepository.GetAll() select new { l.Area.AreaDescription })
.Distinct()
.ToSelectList(x => x.AreaDescription, x => x.AreaDescription, "All");
和实际降视图内上下:
@Html.DropDownList("City", Model.City)
个人而言,我避免在我看来机型采用枚举。他们不擅长ASP.NET MVC。所以,如果我需要呈现在我的观点一个一个下拉列表,我在我的相应的视图模型中定义了2个属性:
public class MyViewModel
{
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Values { get; set; }
}
了在我的控制器操作填充从数据库和视图:
@Html.DropDownListFor(x => x.SelectedValue, Model.Values)
我希望+>应该=>或者我肯定错过了linq语法中的一些东西! – 2012-02-14 09:03:42
我试图修复拼写错误,但出现以下错误编辑必须至少包含6个字符;在这篇文章中还有其他改进之处吗? – RickAndMSFT 2012-02-14 19:46:11
@ Rick.Anderson-at-Microsoft.com,我修复了错字。感谢您的注意。 – 2012-02-14 19:52:08
旁注 - 如果你想链接到一个特定的答案,点击它下面的“链接”按钮来永久保存它 – RPM1984 2012-02-14 02:02:16