JavaScriptコードをデバッグして最終的に動作させるときに予期しない問題が発生しました。コントローラから取得したデータは平坦化されています。2次元配列をC#でJson文字列に変換するJavaScriptコード
[HttpPost]
public JsonResult CalendarCellClasses(DateTime date)
{
DateTime firstOfMonth = date.AddDays(-(date.Day - 1));
DateTime lastOfMonth = firstOfMonth.AddMonths(1).AddDays(-1);
int additionalDaysBefore = firstOfMonth.DayOfWeek == DayOfWeek.Sunday ? 0 : (int)firstOfMonth.DayOfWeek - 1;
int additionalDaysAfter = lastOfMonth.DayOfWeek == DayOfWeek.Sunday ? 0 : 7 - (int)lastOfMonth.DayOfWeek;
int daysInMonth = lastOfMonth.Day;
int totalDays = additionalDaysBefore + additionalDaysAfter + daysInMonth;
int numWeeks = totalDays/7;
DateTime firstDayInSeries = firstOfMonth.AddDays(-additionalDaysBefore);
DateTime lastDayInSeries = lastOfMonth.AddDays(additionalDaysAfter);
DateTime current = firstDayInSeries;
string[,] dates = new string[numWeeks,7];
for (int week = 0; week < numWeeks; week++)
{
for (int day = 0; day < 7; day++)
{
dates[week, day] = TrafficData.GetTrafficDate(current).CSSClass;
current = current.AddDays(1);
}
}
return Json(dates);
}
ご覧のとおり、このメソッドを呼び出すJavaScript関数に渡す文字列[、]があります。
jQuery(document).ready(function() {
var calendar = $('#Trafikkalender');
var date = $('#selectedDate').val();
var param = { date: date }
var url = $('#calArrayPostUrl').data('url');
$.post(url, param, function(data) {
var body = calendar.find('tbody');
//var rows = body.getElementsByTagName('tr');
var rows = body.find('tr');
for (var i = 0; i < rows.length; i++) {
//var cols = rows[i].getElementsByTagName('td');
var cols = $(rows[i]).find('td');
for (var j = 0; j < cols.length; j++) {
var col = $(cols[j]);
col.addClass(data[i][j]);
}
}
});
});
が、デバッガのデータによれば、35個の要素を持つ配列であり、そしてそれらは、一次元アレイとして順序付けられているように見えます。私はJsonの文字列を返すときに何か間違ったことをしたのか、2dimの配列はjavascriptのものではありませんか?
は、ジャグ配列を試してみてください。 2次元配列はIEnumerableとして解決され、実装はそれを単一の配列として扱います。 – pwas
ギザギザの配列を聞いたことがありません – inifus
nevermindは、ギザギザが何であるかを発見しました。今すぐ働きます:)ありがとう – inifus