我有一个使用域身份验证的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'。
解决这个问题的最佳方法是什么?
答案 0 :(得分:2)
您需要扩展视图模型以公开Person
属性,然后创建此实例,以类似方式填充它并将其传递到视图中。
var model = new MyModel();
model.Person = new Person((User.Identity.Name));
return View(model);