在不同的 Razor 页面区域之间共享页面
Sharing pages between different Razor Page areas
我想知道我是否可以得到一些关于如何最好地处理这个问题的想法。
我有一个 Razor Pages 应用程序。我有几个区域,每个区域都有自己的布局页面和菜单。
这很简单,但我有几页需要与两个或更多区域共享。这些共享页面将传递一个参数,指示它正在被哪个区域使用,我希望该页面的布局页面(菜单)是该区域的布局页面。 (理想情况下,URL 也会反映当前区域。)
我不确定这是否可行。我想让事情尽可能简单。但我想出的只是一些相当复杂的路由内容。
我能想到的两个方案:
将共享页面放在根页面文件夹中,并使用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";
}
}
- 将页面添加到充当占位符的区域以生成路由,然后将共享页面的主体提取到可以放置在顶级 Pages/Shared 文件夹中的部分,以便可以访问到应用程序中的所有其他页面。如果你想集中共享页面的一些处理,创建一个继承自 PageModel 的 class 并将你的处理逻辑放在那里,然后让实际的 PageModel classes 继承它。
您可以使用局部视图来实现。
因此,创建一个局部视图并将其放置在区域中(例如在 Common 或其他文件夹中)。
在 areas 文件夹中创建仅呈现局部视图的主视图。
我想知道我是否可以得到一些关于如何最好地处理这个问题的想法。
我有一个 Razor Pages 应用程序。我有几个区域,每个区域都有自己的布局页面和菜单。
这很简单,但我有几页需要与两个或更多区域共享。这些共享页面将传递一个参数,指示它正在被哪个区域使用,我希望该页面的布局页面(菜单)是该区域的布局页面。 (理想情况下,URL 也会反映当前区域。)
我不确定这是否可行。我想让事情尽可能简单。但我想出的只是一些相当复杂的路由内容。
我能想到的两个方案:
将共享页面放在根页面文件夹中,并使用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";
}
}
- 将页面添加到充当占位符的区域以生成路由,然后将共享页面的主体提取到可以放置在顶级 Pages/Shared 文件夹中的部分,以便可以访问到应用程序中的所有其他页面。如果你想集中共享页面的一些处理,创建一个继承自 PageModel 的 class 并将你的处理逻辑放在那里,然后让实际的 PageModel classes 继承它。
您可以使用局部视图来实现。 因此,创建一个局部视图并将其放置在区域中(例如在 Common 或其他文件夹中)。
在 areas 文件夹中创建仅呈现局部视图的主视图。