首页 > 解决方案 > Razor Pages:如何在部分页面中包含 pagesection?

问题描述

我有一个 Razor Pages 布局页面,其中包含一个导航栏作为部分页面

<html>
...
<body>
...
<partial name="_Nav" />

在我的 _Nav.cshtml 里面

<div class="links">
    <a href="#link1">link 1</a>
    <a href="#link2">link 2</a>
<!-- custom links that are set by each page  go here-->
</div>

网站中的每个页面都使用此布局。我希望能够包含与网站中每个页面相关的“额外”链接。

我试过这样做@RenderSection,但似乎只允许Layout页面中的部分。这是否意味着我需要取消我的_Nav部分代码并将所有代码集中到一个文件中?或者有没有办法保持有组织的代码结构并仍然传递一些代码?使用 jinja2 代码块,这没问题,所以我希望 Razor Pages 中也有一个不错的方法!

另外,我真的不想将完整的 html 字符串从 c# 类传递给 html,我已经在链接中传递了我需要的任何变量。

谢谢你的帮助!

标签: c#.netasp.net-corerazor-pages

解决方案


您不必将 html 存储在ViewDataDictionary.

在每个需要添加额外链接的视图上,存储一个List<string>字符串作为 url,如下所示:

看法:

@{
   ViewData["Links"] = new List<string>(){ "https://www.google.com", "https://www.facebook.com" };
}

然后在您的布局视图中:

<partial name="_Nav" view-data="@ViewData" />

现在在您的部分视图中:

//Default Links
@if (ViewData["Links"] != null)
{
  //We have extra links
  List<string> links = (List<string>)ViewData["Links"];
  foreach (string link in links)
  {
    <a href="@link">link1</a>
  }
}

推荐阅读