ASP.NETMVCでjQueryグリッドを使用するPhilHaackの例に従っています。私はそれを機能させています、そしてそれはうまく機能します...1つの小さな問題を除いて。ID以外で列を並べ替えると、サーバーから返される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);
}
jsGridテーブルでPersonIDで並べ替えると、このデータが返されます(現在のIDの名前を名前として使用しました(例:1、One、2、Twoなど))。
{"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で並べ替えると、1行おきに順序(IDと名前)が逆になります。したがって、テーブルに表示すると、PersonNameはID列にあり、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]...など
これは常に起こっており、常に一貫しています。何が起こっているのかを理解しようと少し頭がおかしくなります。それは単純なものでなければならないように思われるからです。