Mvc5将模型传递给布局页面

时间:2017-10-20 07:40:00

标签: layout asp.net-mvc-5 controller

我有一个带有adminlte模板的MVC 5站点。它工作正常。现在我需要传递一些数据到_layout页面。我需要传递到_layout页面相同的信息,如警报的数量,电子邮件的数量,警报列表ecc。我阅读了有关BaseController的相同文档,其中执行此操作,即读取此数据并放入模型,或创建抽象模型并将此信息放入其中。但是不可能一次创建这个模型(即在用户登录控制器上)并在所有请求中共享它而无需在每次控制器调用时重新创建它?实际上,作为全球单身人士变异。 感谢。

2 个答案:

答案 0 :(得分:2)

看起来像是一个很好的用例来使用可以从布局视图中调用的ChildAction。

首先创建一个视图模型来表示数据

<div>
    <p>@Model.EmailCount emails</p>
    <p>@Model.NotificationCount notifications</p>
</div>

现在创建一个动作方法,创建一个对象,设置值并传递给局部视图

_Layout.cshtml

现在您的Alerts.cshtml视图(我们的视图模型强类型)可以呈现您想要的任何内容。

<div>@Html.Action("Alerts", "Home")</div>

可以从top视图调用此操作方法。

%MEM

使用这种方法,您无需担心为每个操作创建视图模型。 (例如:您的页面通常不需要视图模型)

答案 1 :(得分:0)

是的,你可以创建一个基本视图模型&amp;让所有模型继承它

public class MyModel
{
    public MyBaseClass BaseClass { get; set; }
}

public abstract class MyBaseClass
{
    public virtual string MyName
    {
        get
        {
            return "MyBaseClass";
        }
    }
}

public class MyDerievedClass : MyBaseClass
{

    public int MyProperty { get; set; }
    public override string MyName
    {
        get
        {
            return "MyDerievedClass";
        }
    }
}

唯一的问题是..默认的CreateModel进程没有注册这个deafult视图模型所以global.asax是你调整它的地方..

Here is a good explanation