予約システムに JQuery UI 日付ピッカー プラグインを使用しています。このために、次のスクリプトを使用して、すでに予約されている日付を確認しています。
var bookedDays = ["2013-5-3", "2013-5-4"];
function assignCalendar(id) {
$('<div class="calendar" />').insertAfter($(id)).datetimepicker({
altFormat: "dd-mm-yy",
altTimeFormat: "hh:mm tt",
useLocalTimezone: true,
minDate: new Date(),
maxDate: '+1y',
altField: id,
altFieldTimeOnly: false,
showButtonPanel: false,
firstDay: 1,
dayNamesMin: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
beforeShowDay: isAvailable
});
}
function isAvailable(date) {
var dateAsString = date.getFullYear().toString() + "-" + (date.getMonth() + 1).toString() + "-" + date.getDate();
var result = $.inArray(dateAsString, bookedDays) == -1 ? [true] : [false];
return result;
}
これはうまくいっています。しかし、私が必要とするのは、予約された日付をDBから配列として動的にロードし、それを上記の関数に渡すことです。次のことを試しましたが、適切な値が得られませんでした。
これが私のコントローラーコードです:
public JsonResult GetBookedDates(int resourceTypeID=1)
{
var dates = new List<string>();
var resources = _db.Resources.Where(r => r.ResourceTypeID == resourceTypeID);
foreach (var resource in resources)
{
Resource resource1 = resource;
var reservedDates = _db.Reservations.Where(rv => rv.ResourceID == resource1.ID);
foreach (var reservedDate in reservedDates)
{
for (DateTime dt = Convert.ToDateTime(reservedDate.Booked); dt <= Convert.ToDateTime(reservedDate.Checkout); dt = dt.AddDays(1))
{
dates.Add("\"" + dt.Year + "-" + dt.Month + "-" + dt.Day + "\"");
//dates.Add(dt.Year + "-" + dt.Month + "-" + dt.Day);
//dates.Add("\"" + dt.ToString("yyyy-MM-dd") + "\"");
}
}
}
return Json(dates, JsonRequestBehavior.AllowGet);
}
および変更された JQuery 関数:
$(document).ready(function (e) {
$.ajax({
type: 'GET',
url: "/Home/GetBookedDates?resourceTypeID=1",
traditional: true,
success: function (data) {
var bookedDays = data // --> Here I need the array of booked dates
assignCalendar('#date_in_input');
assignCalendar('#date_out_input');
function assignCalendar(id) {
$('<div class="calendar" />').insertAfter($(id)).datetimepicker({
altFormat: "dd-mm-yy",
altTimeFormat: "hh:mm tt",
useLocalTimezone: true,
minDate: new Date(),
maxDate: '+1y',
altField: id,
altFieldTimeOnly: false,
showButtonPanel: false,
firstDay: 1,
dayNamesMin: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
beforeShowDay: isAvailable
});
}
function isAvailable(date) {
var dateAsString = date.getFullYear().toString() + "-" + (date.getMonth() + 1).toString() + "-" + date.getDate();
var result = $.inArray(dateAsString, bookedDays) == -1 ? [true] : [false];
return result;
}
}
});
});
これを解決するのを手伝ってください