【发布时间】: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 => p.Name, StringComparer.OrdinalIgnoreCase),因此您不需要自制比较器。
标签: asp.net-mvc linq entity-framework razor