JsonResults和GET POST的执行顺序
本文关键字:执行 顺序 POST GET JsonResults | 更新日期: 2023-09-27 18:25:59
我正试图找出别人的代码。这是MVC 4.0,对这个ActionResult的调用从来没有开始或结束日期。从不因此,它启动了getCalVm,正如你可以摸索的那样,它构建了返回到view的视图模型。然而,在返回的过程中,JsonResult(位于ActionResult下方)捕获了代码执行路径,并对返回的视图模型进行了平坦化,该视图模型调用了完全相同的视图模型,但现在将其封装在今天的日期+或-2个月内。
奇怪的是,这个Calendar ActionResult在Global.asax中没有被定义为映射的路由,这与我读到的关于路由的所有内容相反。我可以找到JsonResult路由GetEventsByEntity和另外两个路由的定义。请参阅下面的完整路线定义。
有人能告诉我,是否定义了一条映射到/School/Calendar/EntityID的路线,可以获得这个URL www.domain.com/School/Calendar/10001,它是哪条路线吗?
最后,执行命令。为什么JsonResult路由在ActionResult之后触发?我可以在JsonResults中放入一个测试条件,通知他们视图已经构建,他们应该放弃执行。类似于使用会话变量来通知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
);
有关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.