我有以下 Controller 操作:
public JsonResult GetInvestors(int bank)
{
var investors = _context.Investors
.Where(i => i.BankNumber == bank)
.Select(i => new { InvestorId = i.InvestorId.ToString(), InvestorName = i.InvestorName + " (" + i.BankNumber + ")" })
.OrderBy(i => i.InvestorName)
.ToDictionary(i => i.InvestorId, i => i.InvestorName);
return Json(investors, JsonRequestBehavior.AllowGet);
}
下面的 javascript 调用该操作,现在仅启动调试器,以便我可以浏览结果:
function getInvestors(bank)
{
$.ajax
({
url: "/InvestorDetail/GetInvestors",
type: "POST",
data: { bank: bank },
dataType: "json",
success: function (returnedData) { debugger; }
});
}
如果我在 Controller 操作中观看investors
,它会按投资者姓名排序,这就是我想要的。但是,当我进入 javascript 调试器并查看 returnedData
时,数据会按投资者 ID 排序。
或者,如果我将 OrderBy 放在 ToDictionary 之后并按 Value 排序,则在 javascript 调试器中,结果的 json 结构会有所不同,但它会像我想要的那样按投资者姓名排序。
为什么从字典返回时排序顺序会改变?
谢谢。
最佳答案
出于枚举的目的,字典中的每个项目都被视为表示值及其键的 KeyValuePair 结构。返回项目的顺序未定义。
不过,您可以使用排序字典,或者在客户端对其进行正确排序。
关于javascript - 为什么从字典返回 JsonResult 会改变排序顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58528433/