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