2016-04-22 57 views
0

我有一个使用域身份验证的Asp.Net MVC应用程序,_Layout.cshtml文件包含对域环境返回正确域用户名的User.Identity.Name的调用。将类实例传递给所有视图

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

在主控制器I实例的类,并将其传递到我的观点:

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的。日志]',但 这本字典需要 'namespace.Models.Person'类型的项目。

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

+0

在同一视图中不能有两个模型。如果你在模板'_Layout.cshtml'中添加一个'Person'模型,你不能在使用这个模板的视图中添加任何模型。 –

回答

2

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

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