如何将一些参数解析为__layout.cshtml?
public class BaseInfo {
public string ShowMenu {get; set;}
public bool IsLoggedIn {get; set;}
public string CustomerName {get; set;}
.....
}
在__layout.cshtml中,我想访问这些字段,对我来说最好的方法是什么?
谢谢!
答案 0 :(得分:0)
您可以将其添加为模型
@model NamespaceName.ModelsFolderName.BaseInfo
你也可以使用
ViewBag
ViewBag.CustomerName = BaseInfoObject.CustomerName;
将任何信息存储在其中。
答案 1 :(得分:0)
使用子操作。创建自定义WebViewPage
类只是疯了,在布局上设置模型只是在寻找麻烦。如果您这样做,那么每个视图也必须使用该模型或该模型的子类。最糟糕的情况是,您将至少有一个需要不同类型模型的视图;最好的情况是,你的整个业务领域是由你在UI中需要的东西定义的(巨大的禁忌)。
子操作就像部分一样,你可以将它们放在布局或视图中的任何位置,但与部分不同,它们会得到自己独立的上下文,不会影响布局或视图中的任何其他内容。
<强> FooController.cs 强>
public class FooController : Controller
{
...
[ChildActionOnly]
public ActionResult DisplayBaseInfo()
{
var baseInfo = new BaseInfo(); // pull from database or construct the instance however you like here
return PartialView("_DisplayBaseInfo", baseInfo);
}
}
<强> _Layout.cshtml 强>
@Html.Action("DisplayBaseInfo", "Foo")
将该呼叫置于您需要的任何位置以显示此实例中的信息。你把孩子的动作放在哪个控制器上并不重要;把它放在对你的应用程序有意义的地方。显然,您需要创建部分视图_DisplayBaseInfo.cshtml
,然后在那里呈现BaseInfo
实例。在该视图中,您可以将模型设置为BaseInfo
并使用强类型,而不会影响其他任何内容。
这样,零依赖项。一切都可以使用标准的MVC类,而不必修改页面类或者记住让每个视图模型都从某个基类继承。