我在使用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实现
答案 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)