将类实例传递给所有视图

时间:2016-04-22 13:44:11

标签: c# asp.net asp.net-mvc razor model

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

我有一个Person模型,用于存储个人详细信息。

在Home Controller中,我将该类实例化并传递给我的视图:

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>*@

这适用于主视图但如果我访问另一个已经在使用其他模型的视图,则会引发异常:

  

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

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

1 个答案:

答案 0 :(得分:2)

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

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