我试图将我的UserModel传递给每个视图,以便它可以显示当前用户信息。把模型放在每个视图上
这是我BaseViewModel:
public class BaseViewModel
{
public UserModel currentUser { get; set; }
}
BaseController:
public class BaseController : Controller
{
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
UserRepository userRep = new UserRepository();
BaseViewModel model = new BaseViewModel
{
currentUser = userRep.getCurrentUser()
};
base.OnActionExecuted(filterContext);
}
}
的HomeController:(默认)
public class HomeController : BaseController
{
public ActionResult Index()
{
ListRepository listRep = new ListRepository();
return View(listRep.GetAllLists());//returns IEnumerable<ListModel>
}
}
我的共享_layout.cshtml:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - My ASP.NET Application</title>
@Styles.Render("~/Public/css")
</head>
<body>
<header>
@Html.Partial("_Header")
</header>
@RenderBody()
</body>
</html>
最后,我_Header.cshtml:
<div id="logo">
<h1>Hello @Model.currentUser.username</ h1 >
</div>
但是当我运行它,我得到这个错误信息:
'System.Collections.Generic.List'不包含'currentUser'的定义
我想我的BaseViewModel
就会让附加
我应该创建一个新的控制器还是将其添加到现有的控制器?另外,无关,是否有可能返回一个不同的局部视图,取决于用户是否登录? – Cornwell
就个人而言,我会把它放在一个单独的控制器(也许'UserController')中,假设你将在与多个控制器关联的多个视图中使用该部分 –
并且您可以随时检查请求是否已通过身份验证,并使用'return PartialView(“abc “,model);''''或'返回PartialView(”xyz“,model);'(甚至模型可能不同) –