在某些 Razor 视图中隐藏渲染页面

Hide Render page in some views Razor

在我的 mvc 应用程序中,我制作了一个页脚并像这样嵌入它

<div class="off-canvas-wrap" data-offcanvas>
    <div class="inner-wrap">
         @Html.Action("Menu", "Site")
        <aside class="main-section">
            @RenderBody()
        </aside>
        @RenderPage("~/Views/Shared/DisplayTemplates/_footer.cshtml")
    </div>
</div>

此代码位于我的 _layout.cshtml 文件中,我在这里要做的是隐藏特定页面上的页脚。甚至可以隐藏特定页面上的页脚吗?

期待您的建议。

是的,您可以通过多种方式做到这一点,第一种是在 Razor 中使用 C#:

@if (myCondition)
{
    @RenderPage(...);
}

或者你可以让 JavaScript 和 jQuery 一起做:

<script>
$(function() {
    if (myConditionInJavaScript) {
        $("#myfooter").hide();
    }
});
</script>

上面的 JavaScript 代码将在整个页面加载后自动执行,这要感谢 $(function() { ... }) jQuery 功能。

您有多种选择

  1. 用户 jquery 代码隐藏特定页面上的页脚 div。 使用 $('#footerId').hide();在该特定页面上。

  2. 使用可以在特定的 actionresult 上设置一个 viewbag 并检查设置了 viewbag 的布局页面而不是隐藏,否则保持原样。

例如

 @if(Viewbag.ShowFooter!="False")    
 {    
  @RenderPage("~/Views/Shared/DisplayTemplates/_footer.cshtml")    
 }

由于您的条件将出现在正在呈现的页面中而不是布局中,您将不得不保留一些可以在页面加载后调用的全局函数。 像

window.myfunction =function() {
    if (myConditionInJavaScript) {
        $("#myfooter").hide();
    }
}

并在您的子页面中调用此函数。通过 window.myfunction();

您也可以使用Viewbag,但需要在渲染或更新时在每个视图中设置ViewBag 的值。

如果您只有一个部分需要隐藏,我认为最有效的方法是保持两个独立的布局。因为无论您在每次页面加载时选择哪种方式,都会触发条件,这可能会导致性能下降。

如果您想从布局中隐藏页脚,您可以这样做:

In _layout:


    @if (IsSectionDefined("hidefooter"))
    {
         @RenderSection("hidefooter", false)
    }
    else  // Just regular footer from layout
    {
        <footer class="footer top30">
            <div class="container">
               <div class="row">
                  <div class="col-lg-12 text-center">
                        <p>Copyright &copy; ABC</p>
                   </div>
                </div>
                </div>
            </footer>
        }

In chtml file:
@section hidefooter {}

将 css 添加到要隐藏页脚的 page.cshtml

footer {
    visibility: collapse;
}