【问题标题】:JsonResults and Execution Order of GET POST [closed]GET POST的JsonResults和执行顺序[关闭]
【发布时间】:2014-10-07 17:38:36
【问题描述】:

我正在尝试找出其他人的代码。这是 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 中放置一个测试条件,通知他们视图已经构建并且他们应该放弃执行。类似于使用通知 JsonResult 外观的 Session 变量,我们有数据停止执行。正确强制执行代码的正确方法是什么。以前的开发人员正在失业线上拿卡,所以我不确定他打算如何处理这个烂摊子。如果有人比我有更多的经验可以解释男人,我会全神贯注。

最后,我如何从客户端的 onclick 中调用此操作结果?更具体地说,这是正确的方法吗?我正在将视图反馈到这个第 3 方日历,也许有更好的方法。 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
       );

【问题讨论】:

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


    【解决方案1】:

    有关 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多