如何从一个特定页面的布局中删除一个HTML元素

本文关键字:一个 布局 删除 元素 HTML | 更新日期: 2023-09-27 17:50:45

我是ASP新手。. NET MVC,我想知道我应该做什么,如果我的_Layout.cshtml有一个元素

<div class="navbar navbar-inverse navbar-fixed-top">
   ...
</div>

,我不想为具有控制器SomePageController.cs和视图SomePage.cshtml的特定页面生成。我是否只是将这段HTML封装在if语句中,如

@if(not on SomePage) {
    <div class="navbar navbar-inverse navbar-fixed-top">
       ...
    </div>
}

还是有更合适的方法?

如何从一个特定页面的布局中删除一个HTML元素

我通常在ViewBag中使用魔法字符串。我在我的控制器中设置它(如果你愿意,你也可以在视图的顶部设置它)。

ViewBag.HideNavBar = true;

@if(ViewBag.HideNavBar == null) {
    <div class="navbar navbar-inverse navbar-fixed-top">
       ...
    </div>
}

我一直使用这种策略将选项传递到布局中(例如日期选择器选项)

给不需要<div>的单个页面一个不同的布局:

@model Foo
@{
    Layout = "~/Views/Shared/_LayoutWithoutNavigation.cshtml";
}
<!-- rest of HTML --> 

你可以有多种选择

1:简单的技巧…只需使用If条件并从查询字符串中获取路由名称,并将其与您的路由进行匹配。

2:使用两种不同的布局。一个有HTML部分,一个没有HTML部分。当创建视图时,只需指定布局而不需要HTML。

3使用ViewBag/tempData

方法:

:

if(Request.QueryString["routeName"] != "MyRoute" )
{
   //Render HTML Part
}

第二:

@{
 layout = "~/shared/LayoutWithoutHTML.cshtml";
}

3

在你想要隐藏HTML的控制器

viewBag。HTMLCheck = true;

In your View

if(viewBag.HTMLCheck != true)
{
  // Html Part
}

你的解决方案似乎是一个合适的方式去做,但理想情况下,如果它不打算在每个页面上,没有该部分的页面应该使用不同的布局。