Я следую примеру Фила Хаака по использованию jQuery Grid с ASP.NET MVC . У меня это работает, и это работает хорошо ... за исключением одной незначительной проблемы. Когда я сортирую столбцы по чему-то отличному от идентификатора, данные JSON, возвращаемые с сервера, очень ... ну ... неверны. Вот мой метод Контроллера.
[HttpPost]
public ActionResult PeopleData(string sidx, string sord, int page, int rows)
{
int pageIndex = Convert.ToInt32(page) - 1;
int pageSize = rows;
int totalRecords = repository.FindAllPeople().Count();
int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);
var people = repository.FindAllPeople()
.OrderBy(sidx + " " + sord)
.Skip(pageIndex * pageSize)
.Take(pageSize);
var jsonData = new
{
total = totalPages,
page = page,
records = totalRecords,
rows = (
from person in people
select new
{
i = person.PersonID,
cell = new List<string> { SqlFunctions.StringConvert((double) person.PersonID), person.PersonName }
}
).ToArray()
};
return Json(jsonData);
}
Когда я сортирую по PersonID в таблице jsGrid, я получаю эти данные обратно (я просто использовал имя текущего идентификатора в качестве имени - например, 1, Один; 2, Два и т. Д.)
{"total":1,"page":1,"records":6,"rows":[{"i":1,"cell":[" 1","One"]},{"i":2,"cell":[" 2","Two"]},{"i":3,"cell":[" 3","Three"]},{"i":4,"cell":[" 4","Four"]},{"i":5,"cell":[" 5","Five"]},{"i":6,"cell":[" 6","Six"]}]}
Однако, когда я сортирую по PersonName, в каждой второй строке меняется порядок (идентификатор и имя). Поэтому, когда я показываю это в таблице, PersonName находится в столбце ID, а идентификатор - в столбце person. Вот результат JSON.
{"total":1,"page":1,"records":6,"rows":[{"i":5,"cell":[" 5","Five"]},{"i":4,"cell":["Four"," 4"]},{"i":1,"cell":[" 1","One"]},{"i":6,"cell":["Six"," 6"]},{"i":3,"cell":[" 3","Three"]},{"i":2,"cell":["Two"," 2"]}]}
Кто-нибудь знает, что я сделал неправильно, что вызывает это?
Обновление
Итак, я узнал, что происходит то, что значения моего массива меняются для каждого другого элемента в массиве. Например ... если я заполню свою базу данных:
[A, B, C]
затем для каждого четного результата (или нечетного, если вы считаете от 0) мои данные возвращаются:
[C, B, A]
Итак, в конечном счете, мои данные строки JSON выглядят примерно так:
[A, B, C]
[C, B, A]
[A, B, C]
[C, B, A]
... и т.д.
Это всегда происходит и всегда соответствует. Я немного схожу с ума, пытаясь понять, что происходит, потому что кажется, что это должно быть что-то простое.