我和你在一起,Exitos:我ViewBag
也避免使用。除了愚蠢的名字,我不喜欢随之而来的弱类型。有一个解决方案,但它有点牵涉,所以请耐心等待。
首先,创建一个类来存储要传递给布局的“显示提示”。我创造性地称这个类为“DisplayHints”:
public class DisplayHints {
// anything that you want passed from a view to the layout goes here
public bool ShowBanner { get; set; }
}
然后,创建一个派生自它的类,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"];
}
}
}
正如下面的评论者指出的那样,ViewData
是弱类型的,就像ViewBag
. 但是,我没有办法避免在/中存储一些东西;这只是将弱类型变量的数量减少到一个。完成此操作后,您可以根据需要存储尽可能多的强类型信息。ViewData
ViewBag
DisplayHints
现在您已经有了视图的基类,在 中Web.config
,我们需要告诉 MVC 使用您的自定义基类:
<pages pageBaseType="MyNamespace.Views.MyViewPage">
这听起来很麻烦,但是您为所有这些工作获得了一些重要的功能。现在在您的视图中,您可以设置任何您想要的显示提示,如下所示:
@{ DisplayHints.ShowBanner = true; }
在您的布局中,您可以轻松访问它:
@if( DisplayHints.ShowBanner ) {
<div>My banner....</div>
}
我希望这有帮助!