如何将参数解析为__layout.cshtml?

时间:2015-09-17 10:06:37

标签: c# asp.net-mvc

如何将一些参数解析为__layout.cshtml?

public class BaseInfo {
      public string ShowMenu {get; set;}
      public bool IsLoggedIn {get; set;}
      public string CustomerName {get; set;}
      .....
}

在__layout.cshtml中,我想访问这些字段,对我来说最好的方法是什么?

谢谢!

2 个答案:

答案 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类,而不必修改页面类或者记住让每个视图模型都从某个基类继承。