繁体   English   中英

将类实例传递给所有视图

[英]Pass class instance to all views

我有一个使用域身份验证的Asp.Net MVC应用程序,_Layout.cshtml文件包含对User.Identity.Name的调用,该调用在域环境上返回正确的域用户名。

我有一个可以存储个人详细信息的Person模型。

在家庭控制器中,我实例化该类并将其传递到我的视图中:

public ActionResult Index()
{
    var personInstance = new Person((User.Identity.Name));
    return View(personInstance);
}

然后在_Layout.cshtml中添加我正在使用的模型:

@model namespace.Models.Person

然后从那里用所需的属性替换User.Identity.Name

<p class="nav navbar-text navbar-right">Hello, @Model.fullName</p>
 @*<p class="nav navbar-text navbar-right">Hello, @User.Identity.Name</p>*@

这对于Home Views来说效果很好,但是如果我访问已经在使用另一个模型的另一个View,则会抛出异常:

传递到字典中的模型项的类型为'System.Collections.Generic.List`1 [namespace.Models.Logging]',但是此字典需要类型为'namespace.Models.Person'的模型项。

解决此问题的最佳方法是什么?

您需要扩展视图模型以显示Person属性,然后创建此对象的实例,以类似的方式填充它,并将其传递到视图中。

var model = new MyModel();
model.Person = new Person((User.Identity.Name));
return View(model);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM