JsonResults и порядок выполнения GET POST

1

Я пытаюсь выяснить код другого. Это MVC 4.0, и вызов этого ActionResult никогда не имеет даты начала или окончания. Никогда. Таким образом, он запускает getCalVm, который, как вы можете grock, создает модель представления, возвращаясь к представлению. Однако на этом пути назад этот JsonResult (ниже ActionResult) захватывает путь выполнения кода и выравнивает возвращенную модель представления, ссылаясь на ту же модель просмотра, но теперь обертывает ее в сегодняшнюю дату + или - 2 месяца.

Каким нечетным является этот Calendar ActionResult, не определяется как сопоставленный маршрут в Global.asax, который вопреки всему, что я читал о маршрутах. Я могу найти определения для маршрутов JsonResult GetEventsByEntity и двух других. См. Определения полного маршрута ниже.

Может ли кто-нибудь сказать мне, есть ли маршрут, определенный для карт /School/Calendar/EntityID, который получит этот URL-адрес www.domain.com/school/calendar/10001 и какой маршрут он будет?

Наконец, порядок выполнения. Почему запускаются маршруты JsonResult после ActionResult? Могу ли я поставить условие теста в JsonResults, который сообщает им, что представление уже построено, и они должны отказаться от выполнения. Что-то вроде использования переменной Session, которая уведомляет об образе JsonResult, у нас есть остановка данных. Каков правильный способ надлежащего принуждения этого выполнения кода. Предыдущий разработчик берет карты на линии безработицы, поэтому я не уверен, что он намеревался с этим беспорядком. Если кто-то с большим прикосновением, чем я могу интерпретировать человека, я все уши.

Наконец, как я могу назвать это действие результатом onclick на стороне клиента? Более конкретно, это будет правильный способ сделать это? Я кормлю взгляд на этот третий календарь и, возможно, там лучший способ. http://fullcalendar.io/ извините за потоп, но я думаю, что этот код сосет, и я не могу понять. Так что либо я прав, и мне нужно это исправить, либо я глуп. Я в порядке, будучи глупым, признавая, что это единственный способ исправить этот недостаток.

Кроме того, если есть способ использовать Ajax и загружать предыдущий и следующий месяц для io-календаря, я хотел бы знать, как это сделать. Я не прошу кого-нибудь написать код, хотя я бы поблагодарил их за это. Но URL-адрес календаря имеет документы. Если кто-то, кто понимает Ajax и javascript лучше, чем я (который примерно у кого-то выше 3 футов), может помочь, подбросить ссылку или что-то, что я куплю пиво в этой жизни или в следующем.

    public ActionResult Calendar(int? id, DateTime? startDate, DateTime? endDate)
    {
        SetSchoolIdCookie(id);
        return View(getCalVm(id, startDate, endDate));
    }

    [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
    public JsonResult GetEventsByEntity(DateTime? startDate, DateTime? endDate)
    {
        if (!startDate.HasValue) { startDate = DateTime.Today.AddMonths(-2); }
        if (!endDate.HasValue) { endDate = DateTime.Today.AddMonths(2); }
        return Json(getCalVm(null, startDate.Value, endDate.Value), JsonRequestBehavior.AllowGet);
    }

Здесь карты маршрутов:

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");


        routes.MapRoute(
        "GameRoute", // Route name
        "Teams/Game/{id}/{entityId}", // URL with parameters
        new { controller = "Teams", action = "Game", id = UrlParameter.Optional, entityId = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute(
        "TournamentRoute", // Route name
        "Teams/Tournament/{id}/{entityId}", // URL with parameters
        new { controller = "Teams", action = "Tournament", id = UrlParameter.Optional, entityId = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute(
        "SchoolStateSearch", // Route name
        "School/StateSearch", // URL with parameters
        new { controller = "School", action = "StateSearch" } // Parameter defaults
        );

        routes.MapRoute(
        "SchoolSearch", // Route name
        "School/Search", // URL with parameters
        new { controller = "School", action = "Search" } // Parameter defaults
        );

        routes.MapRoute(
          "SchoolCalendarJson", // Route name
          "School/GetEventsByEntity", // URL with parameters
          new { controller = "School", action = "GetEventsByEntity" } // Parameter defaults
       );

        routes.MapRoute(
          "SchoolCalendarJsonSummary", // Route name
          "School/GetSummaryEventsByEntity", // URL with parameters
          new { controller = "School", action = "GetSummaryEventsByEntity" } // Parameter defaults
       );

        routes.MapRoute(
          "SchoolCalendarJsonDetails", // Route name
          "School/GetDetailEventsByEntity", // URL with parameters
          new { controller = "School", action = "GetDetailEventsByEntity" } // Parameter defaults
       );

        routes.MapRoute(
          "School", // Route name
          "School/{id}", // URL with parameters
          new { controller = "School", action = "Index", id = UrlParameter.Optional } // Parameter defaults
       );

        routes.MapRoute(
          "Default", // Route name
          "{controller}/{action}/{id}", // URL with parameters
          new { controller = "School", action = "Index", id = UrlParameter.Optional } // Parameter defaults
       );
Теги:
model-view-controller
asp.net-mvc-4

1 ответ

0
Лучший ответ

См. Это для базового понимания контроллеров и маршрутов ASP.NET MVC.

Запрос GET по этому адресу:

www.domain.com/School/Calendar/10001

будет использовать этот маршрут:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",                
    new { controller = "School", action = "Index", id = UrlParameter.Optional }
);

и ударит по этой конечной точке:

public ActionResult Calendar(int? id, DateTime? startDate, DateTime? endDate)
{
    SetSchoolIdCookie(id);
    return View(getCalVm(id, startDate, endDate));
}

Поскольку FullCalendar является плагином jQuery, я бы использовал $.get.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню