我有一个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,我已经在链接中传递了我需要的所有变量。
感谢您的帮助!
答案 0 :(得分:1)
您不必将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>
}
}
答案 1 :(得分:0)
RenderSection
只能从布局页面调用。
没有此类插件可将动态链接添加到部分视图。
作为一种解决方法,您可以将div放在_Nav.cshtml之外,如下所示,并使用RenderSection
动态添加指向div的链接:
....
<div class="links">
<partial name="_Nav" />
@RenderSection("Html", required: false)
</div>
....
_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>
}