【问题标题】:Razor Pages: How to include pagesection in a partial page?Razor Pages:如何在部分页面中包含 pagesection?
【发布时间】:2021-02-12 10:59:45
【问题描述】:

我有一个 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,我已经在链接中传递了我需要的任何变量。

感谢您的帮助!

【问题讨论】:

  • 由于部分视图中不允许使用sections,如果您在需要添加链接的每个页面上的特定键下添加指向ViewData 的链接,然后将其传递给您的以ViewDataDictionary 作为参数的局部视图。
  • 谢谢,这是个好主意,我试过了,但无法让剃须刀页面访问 html 作为 viewdata 键的值。你有例子吗?谢谢!

标签: c# .net asp.net-core razor-pages


【解决方案1】:

您不必将 html 存储在您的 ViewDataDictionary 中。

在每个需要添加额外链接的视图上,存储一个 List&lt;string&gt;,字符串是 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>
  }
}

【讨论】:

    【解决方案2】:

    RenderSection 只能从布局页面调用。

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

    作为一种解决方法,您可以在 _Nav.cshtml 之外放置一个 div,如下所示,并使用 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>
    }
    

    【讨论】:

    • 感谢您的解决方法,我希望避免它,但我想我会采取“剃刀页面暴跌”:) 谢谢!
    • 看来您想使用默认的剃须刀页面插件来满足您的要求。经过长时间的研究,没有这样的插件可以做到。因为您所做的是在局部视图中,它是与剃刀页面不同。我认为更简单的方法是使用我所做的或@HMZ 所做的。这是不可能避免的。如果我的回答对您有帮助,请您接受作为答案。它也可以帮助其他人。
    猜你喜欢
    • 2018-04-05
    • 2021-09-25
    • 2021-09-28
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    相关资源
    最近更新 更多