Javascript 按名称而不是默认的json/c排序数据#

Javascript 按名称而不是默认的json/c排序数据#,javascript,c#,json,Javascript,C#,Json,所以我有一个网页,显示一些产品数据。在javascript文件中以json对象的形式调用数据: _loadAll: function (callback) { $.ajax({ 'type': 'GET', 'timeout': 5000, 'cache': false, 'dataType': 'json', 'url': Application.ProductURL + 'Series/Load/All'

所以我有一个网页,显示一些产品数据。在javascript文件中以json对象的形式调用数据:

_loadAll: function (callback) {
    $.ajax({
        'type': 'GET',
        'timeout': 5000,
        'cache': false,
        'dataType': 'json',
        'url': Application.ProductURL + 'Series/Load/All',
        success: function (response) {
            if (response && callback) {
                callback(response);
            }
        },
        error: function (request, errorText, errorCode) {
        }
    });
}
(注意:我从其他人那里接手了这个项目,所以只是整理一下,看看它是如何工作的)

我在c#中找到了如下所示的ProductURL:

我在另一个cs文件中找到的JSONObjects.jpProduct:

  public class JProduct: IProduct
{
    public int Id { get; set; }
    public int SeriesId { get; set; }
    public string Name { get; set; }

public void Load(string productNumber)
    {
        _product = new ProductProxy(productNumber);

        Id = _product.Id;
        SeriesId = _product.SeriesId;
        Name = _product.Name;
}

因此,我的实际问题是:产品当前按其ID排序,我猜这是默认的。但是,我需要按名称对它们进行排序。我想我不能在javascript文件中这样做?我以前没有与JSON合作过,所以不确定。任何关于如何按名称排序的建议都将不胜感激

通常在这类代码中,您可以在大约3个级别中的任意一个级别进行排序:

1) 在数据源(例如SQL server)中,尤其是在使用LinqToSQL或EntityFramework时

2) 在服务器端加载数据后

3) 在客户端使用Javascript

一般来说,我会尽可能靠近数据进行排序,并且只有在我绝对必须这样做的情况下才在客户端进行排序。在这之前,有很多机会进行分类

您继承的数据层代码看起来并没有得到很好的实现,但请查看
ProductSeriesCollection.LoadAll
方法是如何工作的,因为这可能是您想要应用排序的地方。在最坏的情况下,您需要知道
ProductSeriesCollection
如何工作,以便在调用
LoadAll
后对内容进行排序

不过说真的,我强烈建议您为当前的数据层寻找L2S或EF替代品。然后,您可以在查询中添加一个
OrderBy()
子句并完成它


由于无法在服务器上更改顺序,因此可以使用
Array.sort
方法在客户端修改对象的顺序

首先,定义一个比较方法,该方法将返回-1、0或1,具体取决于您希望比较项目的放置顺序。例如:

function compareProduct(a, b) {
    if (a.Name < b.Name)
        return -1;
    if (a.Name > b.Name)
        return 1;
    return 0;
}

如果不是直接数组,请查找产品数组并对其调用sort。

通常在这类代码中,您可以在大约3个级别中的任意一个进行排序:

1) 在数据源(例如SQL server)中,尤其是在使用LinqToSQL或EntityFramework时

2) 在服务器端加载数据后

3) 在客户端使用Javascript

一般来说,我会尽可能靠近数据进行排序,并且只有在我绝对必须这样做的情况下才在客户端进行排序。在这之前,有很多机会进行分类

您继承的数据层代码看起来并没有得到很好的实现,但请查看
ProductSeriesCollection.LoadAll
方法是如何工作的,因为这可能是您想要应用排序的地方。在最坏的情况下,您需要知道
ProductSeriesCollection
如何工作,以便在调用
LoadAll
后对内容进行排序

不过说真的,我强烈建议您为当前的数据层寻找L2S或EF替代品。然后,您可以在查询中添加一个
OrderBy()
子句并完成它


由于无法在服务器上更改顺序,因此可以使用
Array.sort
方法在客户端修改对象的顺序

首先,定义一个比较方法,该方法将返回-1、0或1,具体取决于您希望比较项目的放置顺序。例如:

function compareProduct(a, b) {
    if (a.Name < b.Name)
        return -1;
    if (a.Name > b.Name)
        return 1;
    return 0;
}

如果不是直接数组,请找到产品数组并对其调用sort。

我想您应该查看
ProductSeriesCollection.LoadAll()
。尝试应用
.OrderBy
linq expression over LoadAll()。我想您应该查看
ProductSeriesCollection.LoadAll()
。尝试应用
.OrderBy
linq expression over LoadAll()是的,我知道这并不理想,但我需要保持现状,直到我能说服所有者更仔细地改变事情。另一个问题是,数据层代码也会影响网站的其他部分,因此理想情况下,我会在Javascript中对其进行排序。在这种情况下,
Array.sort
方法可能就是您所需要的。会更新的。是的,我知道这不太理想,但我需要保持现在的状态,直到我能说服业主更深思熟虑地改变事情。另一个问题是,数据层代码也会影响网站的其他部分,因此理想情况下,我会在Javascript中对其进行排序。在这种情况下,
Array.sort
方法可能就是您所需要的。将更新。
function cmpProduct(a,b) { return a.Name < b.Name ? -1 : a.Name > b.Name ? 1 : 0; }
success: function (response) {
    if (response && callback) {
        callback(response.sort(compareProduct));
    }
},