Donutcache Mvc3和地区

时间:2014-01-02 10:02:40

标签: asp.net-mvc asp.net-mvc-3 caching asp.net-mvc-routing outputcache

我在使用donutcaching工作在MVC3区域时遇到了问题。

似乎“area”-attribute并未在routeValueDictionary中传递给MvcDonutCaching中的HtmlHelper Action-method。

我有一个像这样被调用的子进程:@Html.Action("Header", "Menu", true),并且对于不在某个区域内的所有控制器都可以正常工作 - 但是一旦它位于某个区域内,它就无法找到:

“未找到路径'/ Indberetning / Administration / Index'的控制器或未实现IController。”

我发现该区域没有传递到引起行动的exension方法。有人有解决方案吗? :)

AreaRegistration: public class IndberetningAreaRegistration : AreaRegistration { public override string AreaName { get { return "Indberetning"; } }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
          "Indberetning_DiscoHovedgruppe",
          "Indberetning/Disco/Hovedgrupper/{hovedgruppe}",
          new { controller = "Disco", action = "Hovedgrupper", hovedgruppe = UrlParameter.Optional }
      );
        context.MapRoute(
                      "Indberetning_FejlrapportIlOptaelling",
                      "Indberetning/Fejlrapport/IlOptaelling/il{iltype}/{fejltype}/side-{page}",
                      new { controller = "Fejlrapport", action = "IlOptaelling", page = 1 }
                  );


        context.MapRoute(
          "Indberetning_FejlrapportIpOptaelling",
          "Indberetning/Fejlrapport/IpOptaelling/ip{iptype}/{fejltype}/side-{page}",
          new { controller = "Fejlrapport", action = "IpOptaelling", page = 1 }
      );

        context.MapRoute(
         "Indberetning_Fejlrapport",
         "Indberetning/Fejlrapport/{action}/",
         new { controller = "Fejlrapport", action = "Fejlrapport" }
     );

        context.MapRoute(
          "Indberetning_VirksomhedUgyldigArbejdssted",
          "Indberetning/Virksomhed/UgyldigArbejdssted/{pnummer}/side-{page}/{tmetode}",
          new { controller = "Virksomhed", action = "UgyldigArbejdssted", page = 1, tmetode = UrlParameter.Optional }
      );

        context.MapRoute(
         "Indberetning_VirksomhedArbejdssted",
         "Indberetning/Virksomhed/Arbejdssted/{denr}/side-{page}/{tmetode}",
         new { controller = "Virksomhed", action = "Arbejdssted", page = 1, tmetode = UrlParameter.Optional }
     );

        context.MapRoute(
        "Indberetning_VirksomhedArbejdssteder",
        "Indberetning/Virksomhed/Arbejdssteder/side-{page}",
        new { controller = "Virksomhed", action = "Arbejdssteder", page = UrlParameter.Optional }
    );

        context.MapRoute(
           "Indberetning_DiscoDetaljer",
           "Indberetning/Disco/Detaljer/Hoveddiscogruppe-{id}/{jobStatus}",
           new { controller = "Disco", action = "Detaljer", jobStatus = UrlParameter.Optional }
       );
        context.MapRoute(
            "Indberetning_default",
            "Indberetning/{controller}/{action}/{id}",
            new { controller = "Forside", action = "Forside", id = UrlParameter.Optional }
        );
    }
}

public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Indberetning_DiscoHovedgruppe", "Indberetning/Disco/Hovedgrupper/{hovedgruppe}", new { controller = "Disco", action = "Hovedgrupper", hovedgruppe = UrlParameter.Optional } ); context.MapRoute( "Indberetning_FejlrapportIlOptaelling", "Indberetning/Fejlrapport/IlOptaelling/il{iltype}/{fejltype}/side-{page}", new { controller = "Fejlrapport", action = "IlOptaelling", page = 1 } ); context.MapRoute( "Indberetning_FejlrapportIpOptaelling", "Indberetning/Fejlrapport/IpOptaelling/ip{iptype}/{fejltype}/side-{page}", new { controller = "Fejlrapport", action = "IpOptaelling", page = 1 } ); context.MapRoute( "Indberetning_Fejlrapport", "Indberetning/Fejlrapport/{action}/", new { controller = "Fejlrapport", action = "Fejlrapport" } ); context.MapRoute( "Indberetning_VirksomhedUgyldigArbejdssted", "Indberetning/Virksomhed/UgyldigArbejdssted/{pnummer}/side-{page}/{tmetode}", new { controller = "Virksomhed", action = "UgyldigArbejdssted", page = 1, tmetode = UrlParameter.Optional } ); context.MapRoute( "Indberetning_VirksomhedArbejdssted", "Indberetning/Virksomhed/Arbejdssted/{denr}/side-{page}/{tmetode}", new { controller = "Virksomhed", action = "Arbejdssted", page = 1, tmetode = UrlParameter.Optional } ); context.MapRoute( "Indberetning_VirksomhedArbejdssteder", "Indberetning/Virksomhed/Arbejdssteder/side-{page}", new { controller = "Virksomhed", action = "Arbejdssteder", page = UrlParameter.Optional } ); context.MapRoute( "Indberetning_DiscoDetaljer", "Indberetning/Disco/Detaljer/Hoveddiscogruppe-{id}/{jobStatus}", new { controller = "Disco", action = "Detaljer", jobStatus = UrlParameter.Optional } ); context.MapRoute( "Indberetning_default", "Indberetning/{controller}/{action}/{id}", new { controller = "Forside", action = "Forside", id = UrlParameter.Optional } ); } }

代码运行正常,没有outputcache实现

1 个答案:

答案 0 :(得分:0)

您需要使用Html.Action方法的此重载:

public static MvcHtmlString Action(this HtmlHelper htmlHelper,
                                        string actionName,
                                        string controllerName,
                                        object routeValues,
                                        bool excludeFromParentCache)

在你的情况下:

@Html.Action("Header", "Menu", new { Area = "AreaName" }, true)