jQuery.Load () не вызывает Request.IsAjaxRequest в ASP.NET MVC2 - PullRequest
7 голосов
/ 17 августа 2010

Я использую плагин полного календаря 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.

Ответы [ 2 ]

5 голосов
/ 17 августа 2010

Когда вы делаете 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 (). Обычно методы jjuery Ajax отправляют этот заголовок автоматически. Я предполагаю, что по какой-то причине плагин jQuery Calendar не отправляет этот заголовок.

Я бы скачал что-то вроде fiddler или установил Firebug для Firefox и проверил необработанные данные HTTP-запросов / ответов при запуске / инициализации элемента управления Ajax-запросом / календарем. Посмотрите, включен ли заголовок X-Requested-With.

3 голосов
/ 17 августа 2010

Да.Хотя его не нужно отправлять как заголовок HTTP-запроса.Вы можете отправить его в форме данных или в строке запроса GET.www.example.com?x-requested-with=XMLHttpRequest (значение с учетом регистра)

Кажется смешным, но это правда.Я пробовал, и это работает :) Размышления о методе расширения IsAjaxRequest () докажут это:

return ((request["X-Requested-With"] == "XMLHttpRequest") || ((request.Headers != null) && (request.Headers["X-Requested-With"] == "XMLHttpRequest")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...