2014-10-07 13 views
1

我想弄清楚别人的代码。这是MVC 4.0,对此ActionResult的调用永远不会有开始或结束日期。决不。所以它激发了getCalVm,​​你可以通过构建视图模型回到视图。然而,在这个JsonResult(在ActionResult下面)的路上,它捕获代码执行路径并将返回的视图模型变平,调用完全相同的视图模型,但现在将它包装在当前的日期+或 - 2个月内。JSON结果和GET POST的执行顺序

奇怪的是,这个日历ActionResult没有被定义为Global.asax中的映射路由,这与我读过的有关路由的所有内容都是相反的。我可以找到JsonResult路由GetEventsByEntity和其他两个路径的定义。请参阅下面的完整路线定义。

有人可以告诉我,如果有一个路线定义映射到/学校/日历/ EntityID将获得这个URL www.domain.com/school/calendar/10001,它是哪个路线?

最后,执行命令。为什么JsonResult路由在ActionResult之后触发?我可以在JsonResults中放置一个测试条件,通知它们已经构建了视图,并且应该放弃执行。就像使用通知JsonResult外观的Session变量一样,我们有数据停止执行。什么是正确强制执行代码的正确方法。之前的开发者正在失业线上领取卡片,所以我不确定他打算如何处理这个烂摊子。如果有人比我有更多的经验可以解释男人的话,我全都耳熟能详。

最后,我将如何从客户端的onclick中调用此操作结果?更具体地说,这是做到这一点的正确方法?我将观点回馈给第三方日历,也许还有更好的方法。 http://fullcalendar.io/洪水对不起,但我认为这个代码糟透了,我无法理解它。所以要么我是对的,需要解决这个问题,否则我很愚蠢。我很愚蠢,承认这是纠正这个缺陷的唯一方法。

此外,如果有方法使用Ajax并为io日历加载上个月和下个月,我想知道如何。我并不是要求别人写代码,尽管我肯定会为此感谢他们。但日历的网址有文档。如果有人比我更了解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 
     ); 

回答

0

为ASP.NET MVC控制器和路线的一个基本的了解,请参阅this

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