Exi*_*tos 12 asp.net-mvc razor asp.net-mvc-3
我有一个视图,我想使用布局页面.在布局页面中,我想要一个条件横幅,其中一些视图将打开/关闭.只是想知道我怎么能这样做?
我在_Layout.cshtml页面中有这个...
@if (ShowBanner){
<h1>banner</h1>
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何从我的MVC View页面打开/关闭它?或者这是否是正确的做法?我的意思是,如果我在View页面中声明该变量,主人肯定不知道它吗?两者如何通过c#进行通信?我使用Viewbag吗?而不是.
我知道表格的全部内容是关于引用Page或Master成员,但似乎很难看出它与MVC ...
任何帮助非常感谢...
谢谢皮特
Eth*_*own 12
我和你在一起,Exitos:我也避免使用它ViewBag
.除了愚蠢的名字,我不喜欢随之而来的弱打字.有一个解决方案,但它涉及到一些,所以请耐心等待.
首先,创建一个类来存储要传递给布局的"显示提示".我创造性地称这个类为"DisplayHints":
public class DisplayHints {
// anything that you want passed from a view to the layout goes here
public bool ShowBanner { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后,创建一个从中派生的类WebViewPage<T>
,它将成为视图的新基类.请注意我们如何拥有一个名为DisplayHints
存储的属性ViewData
(可用于控制器,视图和布局):
public abstract class MyViewPage<T> : WebViewPage<T> {
public DisplayHints DisplayHints {
get {
if( !ViewData.ContainsKey("DisplayHints") )
ViewData["DisplayHints"] = new DisplayHints();
return (DisplayHints)ViewData["DisplayHints"];
}
}
}
Run Code Online (Sandbox Code Playgroud)
作为一个评论者指出,下面ViewData
是弱类型,就像ViewBag
.但是,有没有办法,我知道的避免存储一些在ViewData
/ ViewBag
; 这只是将弱类型变量的数量减少到一个.完成此操作后,您可以根据需要存储尽可能多的强类型信息DisplayHints
.
既然你有一个基类用于你的视图Web.config
,我们需要告诉MVC使用你的自定义基类:
<pages pageBaseType="MyNamespace.Views.MyViewPage">
Run Code Online (Sandbox Code Playgroud)
这听起来很麻烦,但是你为所有这些工作获得了一些严肃的功能.现在在您的视图中,您可以设置所需的任何显示提示,如下所示:
@{ DisplayHints.ShowBanner = true; }
Run Code Online (Sandbox Code Playgroud)
在您的布局中,您可以轻松访问它:
@if( DisplayHints.ShowBanner ) {
<div>My banner....</div>
}
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助!
归档时间: |
|
查看次数: |
16164 次 |
最近记录: |