如何隐藏_Layout.cshtml页面

时间:2017-02-22 10:59:46

标签: asp.net asp.net-mvc

我在mvc 5项目上工作。

在我的_Layout.cshtml我有一个名为id="topBar"的html元素,每个页面都会显示此元素。

但我有一个名为About.cshtml的页面我不希望这个页面只显示id="topBar"中所有其他html元素的元素_Layout.cshtml我希望它们在{{1}中正常显示}}

任何想法如何实现上述描述的外观?

3 个答案:

答案 0 :(得分:2)

有两种选择:

1。为每个body元素添加ID

您可以在每个页面的正文中添加ID,其中包含例如Controller和Action名称,然后添加CSS规则以隐藏about页面上的topBar元素。

首先,让我们为控制器和动作名称创建两个字符串变量。在_Layout.cshtml中执行此操作:

@{
    string controller = ViewContext.RouteData.Values["controller"].ToString();
    string action = ViewContext.RouteData.Values["action"].ToString();
}

接下来,将ID添加到正文:

<body id="@controller-@action">

在你的css中,你现在可以添加一个规则来隐藏about页面中的topbar(假设控制器叫做HomeController):

#Home-About #topBar {display:none;}

您还可以使用扩展方法来获取控制器和操作名称。例如like this

2。在About页面上使用jQuery

你可以在你的about页面上添加一个Javascript并使用jQuery来隐藏topbar(我假设已经加载了jQuery):

<script>
   $("#topBar").hide();
</script>

答案 1 :(得分:2)

实现此目标的一种简单方法(不使用javascript)是在ViewBag内的Action内设置值,并在布局中使用它:

<强> _Layout.cshtml

@if (ViewBag.ShowTopBar ?? false)
{
    <div id="topBar">

    </div>
}

控制器中的操作:

public class MyAwesomeController : Controller
{

    public ActionResult About()
    {
        ViewBag.ShowTopBar = true;
        return View();
    }

}

答案 2 :(得分:0)

更简单的方法是:单独设置页面样式:

<style>
    #showcase {  display: none; }   
</style>

将其放在您要隐藏的页面上,展示是我的部分ID。 ;)