【问题标题】:Items is not sorted case insensitive in combobox (SelectList)组合框中的项目不区分大小写(SelectList)
【发布时间】:2013-12-10 14:56:28
【问题描述】:

我的任务是对组合框中的产品列表进行排序,不区分大小写。

在视图文件中:

@Html.DropDownListFor(m => m.ProductId, ViewData["Products"] as SelectList, 
                  @Resources.App_GlobalResources.Resource.Common_SelectItem)

在控制器中我尝试了 2 种实现方式:

1)

var products = new SelectList(GetProducts().OrderBy(a => a, new CaseInsensitiveComparer()),
                              "id", "name", selectedProductId);
ViewData["Products"] = products;

public class CaseInsensitiveComparer : IComparer<Product>
{
  public int Compare(Product productX, Product productY)
  {
     return string.Compare(productX.Name,productY.Name,StringComparison.OrdinalIgnoreCase);
  }
}

2)

var orderedProducts = GetProducts().OrderBy(p => p.Name.ToLower()).ToList();
var products = new SelectList(orderedProducts, "id", "name", selectedProductId)
ViewData["Products"] = products;

预期: 列表排序不区分大小写 现在:列表区分大小写

但任何实现都无法按预期工作。有任何想法吗?提前致谢。

【问题讨论】:

  • 如果它没有按预期工作,(1)它是如何工作的,(2)预期是什么?
  • 我已经更新了问题
  • 您的代码对我来说看起来不错。您确定因为接收数据的顺序没有得到这个结果吗?
  • 不确定是否有任何区别,但您可以使用.OrderBy (p =&gt; p.Name, StringComparer.OrdinalIgnoreCase),因此您不需要自制比较器。

标签: asp.net-mvc linq entity-framework razor


【解决方案1】:

尝试创建自己的排序助手:

public static class HtmlExtensions
{
    public static IHtmlString DropDownListForSorted<TModel, TProperty>(
        this HtmlHelper<TModel> helper, 
        Expression<Func<TModel, TProperty>> expression, 
        IEnumerable<SelectListItem> items, 
        object htmlAttributes
    )
    {
        var model = helper.ViewData.Model;
        var orderedItems = items.OrderBy(x => x.Text); // or x => x.Value
        return helper.DropDownListFor(
            expression, 
            new SelectList(orderedItems, "Value", "Text"), 
            htmlAttributes
        );
    }
}

用法:

@Html.DropDownListForSorted(
    x => x.SelectedItem, 
    Model.Items, 
    new { id = "mylist" }
)

【讨论】:

  • 这似乎没有必要?为什么不将排序列表传递给标准 DropDownlistFor
  • 是的,你可以做到。但是您必须传递 SelectListItem 的排序列表。这就是为什么这个助手很有用的原因。我已经更新了代码,将排序从 x.Value 更改为 x.Text
猜你喜欢
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 2011-08-30
相关资源
最近更新 更多