C# Razor页面:如何在部分页面中包含pagesection?

C# Razor页面:如何在部分页面中包含pagesection?,c#,.net,asp.net-core,razor-pages,C#,.net,Asp.net Core,Razor Pages,我有一个剃刀页面布局页面,其中包括导航栏作为部分页面 ... ... 在my_Nav.cshtml中 网站中的每个页面都使用此布局。我想能够包括“额外的”链接,在网站上的每个页面相关 我曾经尝试过使用@RenderSection,但似乎只有在布局页面中才允许使用节。这是否意味着我需要删除我的\u Nav部分代码,并将所有代码合并到一个文件中?或者有没有一种方法可以保持一个有组织的代码结构,并且仍然传递一些代码?对于jinja2代码块,这是没有问题的,所以我希望在Razor页面中也有一个不

我有一个剃刀页面布局页面,其中包括导航栏作为部分页面


...
...
在my_Nav.cshtml中


网站中的每个页面都使用此布局。我想能够包括“额外的”链接,在网站上的每个页面相关

我曾经尝试过使用
@RenderSection
,但似乎只有在
布局
页面中才允许使用节。这是否意味着我需要删除我的
\u Nav
部分代码,并将所有代码合并到一个文件中?或者有没有一种方法可以保持一个有组织的代码结构,并且仍然传递一些代码?对于jinja2代码块,这是没有问题的,所以我希望在Razor页面中也有一个不错的方法

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


谢谢你的帮助

RenderSection
只能从布局页面调用

没有这样的插件可以将动态链接添加到局部视图。

作为一种解决方法,您可以将div放置在_Nav.cshtml之外,如下所示,并使用
RenderSection
动态添加到div的链接:

....             
    <div class="links">
        <partial name="_Nav" />
        @RenderSection("Html", required: false)
    </div>
....
。。。。
@RenderSection(“Html”,必填项:false)
....
_Nav.cshtml:

<a href="#link1">link 1</a>
<a href="#link2">link 2</a>

测试视图:

@page
@model IndexModel

//do your stuff...

@section Html
{
    <a href='#link3'>link3</a>
}
@page
@模型索引模型
//做你的事。。。
@节Html
{
}

您不必在
视图数据字典中存储html

在每个有额外链接要添加的视图上,存储一个
列表
,字符串为URL,如下所示:

视图:

@{
ViewData[“链接”]=新列表(){”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>
  }
}
//默认链接
@如果(ViewData[“链接”!=null)
{
//我们有额外的链接
列表链接=(列表)视图数据[“链接];
foreach(链接中的字符串链接)
{
}
}

由于部分视图中不允许使用
部分
,如果您在需要添加链接的每个页面上的特定键下添加指向
视图数据
的链接,然后将其传递到部分视图,该视图将
视图数据字典
作为参数。谢谢,这是个好主意,我尝试过,但无法使razor页面作为viewdata键的值访问html。你有这样的例子吗?谢谢谢谢你的变通办法,我本想避免它,但我想我会采取“剃须刀页面”的做法:(谢谢!似乎你想使用默认的razor pages插件来满足你的需求。经过长时间的研究,没有这样的插件来完成。因为你所做的是在局部视图中,它不同于razor pages。我认为更简单的方法是使用我所做的或@HMZ所做的。这是无法避免的。如果我的回答帮助了你,你能接受这个答案吗?它也可以帮助别人。
//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>
  }
}