Asp.net mvc 如何在布局页面上设置变量?

Asp.net mvc 如何在布局页面上设置变量?,asp.net-mvc,asp.net-mvc-3,razor,Asp.net Mvc,Asp.net Mvc 3,Razor,我有一个视图,我想使用布局页面。在布局页面中,我希望有一个条件横幅,其中一些视图将打开/关闭。只是想知道我该怎么做 我在_Layout.cshtml页面中有这个 @if (ShowBanner){ <h1>banner</h1> } @if(ShowBanner){ 横幅 } 我想知道如何在我的MVC视图页面上打开/关闭它?或者这是否是正确的做法?我的意思是,如果我在视图页面中声明该变量,那么母版肯定不知道它?两者如何通过c#进行沟通?我用取景袋吗?当然不是

我有一个视图,我想使用布局页面。在布局页面中,我希望有一个条件横幅,其中一些视图将打开/关闭。只是想知道我该怎么做

我在_Layout.cshtml页面中有这个

@if (ShowBanner){

   <h1>banner</h1>

}
@if(ShowBanner){
横幅
}
我想知道如何在我的MVC视图页面上打开/关闭它?或者这是否是正确的做法?我的意思是,如果我在视图页面中声明该变量,那么母版肯定不知道它?两者如何通过c#进行沟通?我用取景袋吗?当然不是

我知道表单的所有内容都是关于引用页面或主成员的,只是在MVC中似乎看不到它

非常感谢您的帮助

谢谢
Pete

为布局使用模型不是一个好主意,因为它会强制所有视图使用该模型。但是,您可以将该类型的信息放入ViewBag中,并在其中一个控制器基础的构造函数中填充该值。

您可以在布局中定义一个部分,然后如果您的视图负责“填充”该部分。。。您的视图可以将HTML放置在该部分中

在这里,您可以看到有关使用部分的详细逐步教程:


我支持你,Exitos:我也避免使用
ViewBag
。除了这个愚蠢的名字,我不喜欢随之而来的打字能力差。有一个解决办法,但有点牵扯其中,所以请容忍我

首先,创建一个类来存储要传递给布局的“显示提示”。我创造性地将此类称为“显示提示”:

然后,创建一个派生自
WebViewPage
的类,该类将成为视图的新基类。请注意,我们有一个名为
displayhits
的属性,它存储在
ViewData
中(可用于控制器、视图和布局):

这听起来很麻烦,但是您可以从所有这些工作中获得一些重要的功能。现在,在视图中,您可以按如下方式设置任何显示提示:

@{ DisplayHints.ShowBanner = true; }
在您的布局中,您可以轻松访问它:

@if( DisplayHints.ShowBanner ) {
  <div>My banner....</div>
}
@if(displayints.ShowBanner){
我的旗帜。。。。
}

我希望这有帮助

你甚至可以有一个基本控制器,总是把变量放在viewbag中当然,我不确定OP是否总是使用相同的控制器基础。如果你可以把变量放在viewbag中,为什么不能把它强类型地放在控制器本身中?视图不能直接访问控制器。有趣的是,但是ViewData仍然存在与ViewBag相同的弱类型问题,并且您在实现这一点上遇到了很多麻烦。我喜欢这个解决方案。。而且我不认为扩展
WebViewPage
Maess会“麻烦很多”,是的,
ViewData
ViewBag
有同样的弱键入问题。但是,与将一堆显示提示保存为弱类型变量不同,您只保存了一个对象,可以在其中放置任意数量的强类型内容,包括更复杂的结构。在我的应用程序中,这个
displayHitts
类包含20多个成员…都是强类型的。
<pages pageBaseType="MyNamespace.Views.MyViewPage">
@{ DisplayHints.ShowBanner = true; }
@if( DisplayHints.ShowBanner ) {
  <div>My banner....</div>
}