[英]using extension method for dropdown
我目前正在开发具有创建和编辑视图的 MVC 应用程序。 两种视图在 UI 方面都非常相似。 在每个页面上,我有大约 5-7 个下拉列表,我在以下扩展方法的帮助下将它们填充到控制器中。
public static IEnumerable<SelectListItem> ToSelectListItems<T>(this IEnumerable<T> items, Func<T, string> textSelector, Func<T, string> valueSelector)
{
return items.OrderBy(item => textSelector(item))
.Select(item =>
new SelectListItem
{
Text = textSelector(item),
Value = valueSelector(item)
});
}
现在在编辑视图上,我想显示相同的下拉列表,但这次将所选值设置为 true 为用户在创建视图上选择的任何内容。 这就是我目前的做法
List<SelectListItem> userDdl = new List<SelectListItem>();
foreach (var items in GetUserDropDown(userId, userName))
{
userDdl.Add(new SelectListItem { Value = items.Value, Text = items.Text });
}
userDdl.Where(a => a.Value == someValueFromDb).First().Selected = true;
这行得通,但我在想有没有更好的方法来解决这个问题,或者我坚持这个
我设法弄清楚了。 我为ToSelectListItems
方法创建了一个重载,如下所示:
public static IEnumerable<SelectListItem> ToSelectListItems<T>(this List<T> items, Func<T, string> nameSelector, Func<T, string> valueSelector, Func<T, bool> selecter)
{
return items
.OrderBy(item => nameSelector(item))
.Select(item =>
new SelectListItem
{
Selected = selecter(item),
Text = nameSelector(item),
Value = valueSelector(item)
});
}
现在我可以这样做:
List<SelectListItem> userDdl = GetUserDropDown(userId, userName).ToSelectListItems(a => a.UserName, a => a.UserId.ToString(), a => a.UserId.ToString() == userIdFromDb).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.