繁体   English   中英

使用扩展方法进行下拉

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM