わかりました。ダブルコントローラーのセットアップでこれを機能させる方法を見つけました。
NavigationControllerはajax呼び出しを処理し、部分的なビューを返します(「インデックス」がないことに注意してください)
public class NavigationController : Controller
{
public PartialViewResult Home()
{
return PartialView("Home", null);
}
public PartialViewResult About()
{
return PartialView("About", null);
}
...
}
個別のPermalinkControllerは、通常のビュー全体を返すことによってパーマリンクを処理します(これには「インデックス」がありますが「ホーム」はないことに注意してください:
public class PermalinkController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
return View();
}
...
}
ルート:
routes.MapRoute(
"PermalinkRouter",
"{action}",
new { controller = "Permalink", action = "Index" },
new { }
);
routes.MapRoute(
"NavigationRouter",
"Navigation/{action}/{id}",
new { controller = "Navigation", action = "Home", id = UrlParameter.Optional },
new { }
);
ビュー:
〜/ Views / Shared / _Layout.cshtml:
...
<header></header>
<div id="pageViewContainer">
@RenderBody()
</div>
<footer></footer>
...
〜/ Views / Navigation / Home.cshtml PartialView:
<div> Home Content </div>
〜/ Views / Permalink / Index.cshtmlビュー:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@Html.Partial("~/Views/Navigation/Home.cshtml", null)