2017-12-27 192 views
0

我试图设置一个主页面layout.cshtml,该页面除了一个或两个(通常是登录和注销)以外的所有页面一致地工作。在我的布局中,我想展示一些我不希望为这些特殊页面显示的元素。asp.net核心从内容页面传递数据到布局

我已经看过部分视图和部分,它们似乎都以我想要的方式“向后”工作 - 在这种情况下,我希望默认为“显示所有元素”,但对于我想要的特殊页面能够关闭一个元素。

我以前见过使用PageData将变量传递给布局的代码(这看起来非常有用,因为我可以在相关页面中打一个布尔并在布局中检查它),但是这似乎已被删除。有没有其他的方式工作,而不涉及控制器或更新每一页来显示我想隐藏在1页上的位?

回答

1

有很多不同的方法可以实现这一点。如果您只想“关闭”页面的某个区域,最简单的方法可能是ViewData。喜欢的东西:

_Layout.cshtml

@if (ViewData["ShowThis"] as bool? ?? true) 
{ 
    <!-- HTML here --> 
} 

这将导致其默认为true(显示HTML)如果ViewData关键是没有定义,那么在随后的意见要禁用它,你只需将它定义为false

SomeView.cshtml

@{ 
    ViewData["ShowThis"] = false; 
} 

或者,您可以使用部分。这将使您可以选择用其他方式替换HTML。

_Layout.cshtml

@if (!IsSectionDefined("Foo")) 
{ 
    <!-- HTML here --> 
} 
else 
{ 
    @RenderSection("Foo", required: false) 
} 

然后,在你看来,你只需定义部分。如果你想显示什么,你可以把它定义为空:

SomeView.cshtml

@section Foo {} 

或者你可以可以居然把东西在里面,以取代区域:

@section Foo 
{ 
    <!-- alternate HTML here --> 
} 
+0

谢谢,我现在正在使用后一种方法,并渲染一个空白部分闻起来有点。我尝试过使用ViewData,但是如果我错过了null,那么你的默认提示是。干杯。 – gbjbaanb