Я использую плагин полного календаря Jquery, и я хочу иметь возможность щелкнуть по событию и сведениям о событии, которые будут заполнены через AJAX в div с идентификатором #details.
вот мое действие контроллера, которое я пытаюсь загрузить. При отладке действие не считает входящий запрос AJAX и возвращает полное представление вместо частичного. Имеет ли значение, если полный вид называется таким же, как частичный вид? Т.е.; 'Details.aspx' & 'Details.ascx'?
public ActionResult Details(int id)
{
Pol_Event pol_Event = eventRepo.GetEvent(id);
ViewData["EventTypes"] = et.GetEventType(id);
if (pol_Event == null)
return View("NotFound");
else
{
if(HttpContext.Request.IsAjaxRequest()){
return PartialView("Details");
}
else
return View(pol_Event);
}
}
Вот код jquery, который я использую. Я пропускаю, не используя .load () правильно в функции eventClick? Разработчик плагина календаря подтвердил, что eventClick не имеет ничего общего с AJAX, поэтому ошибка должна заключаться в моем коде.
$(document).ready(function() {
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
events: "/Events/CalendarData",
allDayDefault: false,
selectable: true,
eventClick: function(event) {
$('details').load(event.url);
},
eventRender: function(event, element) {
element.qtip({
content: event.title + " @ " + event.venue,
position: {
corner: {
target: 'topLeft',
tooltip: 'bottomLeft'
}
}
});
}
});
});
Итак, я неправильно использую функцию Jquery.Load (), или что-то не так с моим контроллером?
Дополнительные обновления: я наконец-то уловил проблему. XMLHttpRequest отправляется, но я обнаружил внутреннюю ошибку сервера 500, которая еще не решена, так как я не могу понять, что является причиной ошибки.
Host: localhost:4296
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722
Firefox/3.6.8
Accept: text/html, */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
X-Requested-With: XMLHttpRequest
Referer: http://localhost:4296/Events/EventCalendar
Cookie: .ASPXAUTH=56C5F4FD536564FF684F3F00E9FB51A5F2F1B22D566C517923D71FEAF599D266531CAC52BF49D2700E048DD420A4575456855303CC2DCB5875D4E1AD8883821EA62E5169969503776C78EB3685DAA48C
ОБНОВЛЕНИЕ: Я наконец выяснил, в чем проблема. Я не передавал в модели частичное, поэтому строка
return PartialView("Details");
должна была быть
return PartialView("Details", pol_Event);
, это создавало внутреннюю ошибку обслуживания 500.
Когда вы делаете запрос Ajax, вы должны установить HTTP-заголовок « X-Requested-With » на что-то вроде « XMLHttpRequest », например.
Host www.google.com
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; (snip...)
Accept */*
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
X-Requested-With XMLHttpRequest
Referer http://www.google.com
Заголовок «X-Requested-With» - это то, что ищет метод IsAjaxRequest (). Обычно методы Ajax jQuery отправляют этот заголовок автоматически. Я предполагаю, что по какой-то причине плагин jQuery Calendar не отправляет этот заголовок.
Я бы загрузил что-то вроде fiddler или установил Firebug для Firefox и проверял необработанные данные HTTP-запроса / ответа при запуске / инициализации элемента управления Ajax-запрос / календарь. Посмотрите, включен ли заголовок X-Requested-With.
Да. Хотя его не нужно отправлять как заголовок HTTP-запроса. Вы можете POST в форме данных или в строке запроса GET. www.example.com?x-requested-with=XMLHttpRequest
(значение с учетом регистра)
Выглядит смешно, но это правда. Я пробовал, и это работает :) Размышление о методе расширения IsAjaxRequest () докажет это:
return ((request["X-Requested-With"] == "XMLHttpRequest") || ((request.Headers != null) && (request.Headers["X-Requested-With"] == "XMLHttpRequest")));