在不同的 Razor 页面区域之间共享页面

问题描述

我想知道如何最好地解决这个问题。

我有一个 Razor Pages 应用程序。我有几个区域,每个区域都有自己的布局页面菜单

这很简单,但我有几页需要与两个或更多区域共享。这些共享页面将被传递一个参数,指示它正在使用哪个区域,我希望该页面的布局页面菜单)是该区域的布局页面。 (理想情况下,URL 也会反映当前区域。)

我不确定这是否实用。我想让事情尽可能简单。但我想出的只是一些相当复杂的路由内容

解决方法

我能想到的两个选项:

  1. 将共享页面放在根 Pages 文件夹中,并使用 AddPageRoute 向共享页面添加多个路由,包括区域名称的参数:

    options.Conventions.AddPageRoute("/SharedPage","{areaName}/alias1"); options.Conventions.AddPageRoute("/SharedPage","{areaName}/alias2");

您可以根据 RouteData.Values["areaName"] 的值设置布局。不要使用 area 作为参数名称。就路由而言,这是一个保留字:

 @{
    if(RouteData.Values["areaName"] == "foo")
    {
         Layout = "_FooLayout";
    }
    if(RouteData.Values["areaName"] == "bar")
    {
         Layout = "_BarLayout";
    }
 }
  1. 将页面添加到充当占位符的区域以生成路由,然后将共享页面的正文提取到可以放置在顶层 Pages/Shared 文件夹中的部分,以便其他所有页面都可以访问在应用程序中。如果您想集中处理共享页面的某些处理,请创建一个继承自 PageModel 的类并将您的处理逻辑放在那里,然后让实际的 PageModel 类继承自该类。
,

您可以使用局部视图来实现这一点。 因此,创建一个局部视图,不要将其放置在区域中(例如在 Common 或其他文件夹中)。

在区域文件夹中创建仅呈现部分视图的主视图。