GET POST的JsonResults和执行顺序

时间:2014-10-07 17:38:37

标签: c# json asp.net-mvc-4 model-view-controller

我试图找出别人的代码。这是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以及它是哪条路线?

最后,执行顺序。为什么JasonResult路由在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
       );

1 个答案:

答案 0 :(得分: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