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

问题描述 投票:0回答:2

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

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

我怎样才能实现这个目标?

c# asp.net-core razor-pages .net-5
2个回答
1
投票

我能想到的两个选择:

  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 类继承自该类。

0
投票

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

在区域文件夹中,创建一个仅渲染部分视图的主视图。

© www.soinside.com 2019 - 2024. All rights reserved.