2012-02-17 35 views
1

我有2个控制器。 A HomeControllerAccountController。我有一个_Layout.cshtml和部分视图_Login.cshtml,它在_Layout视图的标题部分中呈现。 HomeController具有默认的Index()方法。剃刀记住我和填充用户信息

第一次,用户看到有一个帐户?登录。登录是指向AccountController中的登录方法的链接。登录视图包含用户名,密码字段和用于记住我的复选框。当用户第一次登录并且记住我时,我打电话给我的MySecurityRepository以:验证用户并获取其个人资料(地址,电话号码,电子邮件等)的基本信息,并且UserInfo对象是填充并且标题显示UserName作为链接。这一切都有效。

用户关闭浏览器并重新打开网站。我看到用户已经登录,Request.IsAuthenticated是真的,但我该如何去检索用户的配置文件和缓存?

这里是什么_Login局部视图看起来像......

<div id="login"> 
@if (Request.IsAuthenticated) 
{ 
    <text> 
     [@Html.ActionLink((HttpContext.Current.Session["UserInfo"] as UserInfo).FirstName, "Profile", "Account")] 
     [@Html.ActionLink("Log Off", "LogOff", "Account")] 
    </text> 
} 
else 
{ 
    <span>Have an account?</span> 
    @Html.ActionLink("Log In", "LogOn", "Account") 
} </div> 

感谢。

回答

0

如果用户信息不可用,您必须从后端获取用户信息。为此,您可以编写一个首先查看会话的子操作,如果该操作不可用,请将其取出并存储在其中。然后,您可以使用Html.Action助手在_Layout中包含此子动作。

+0

我正在学习MVC 3;没有意识到有什么叫做儿童行为。 – CodeWzrd 2012-02-17 19:26:26

+0

@CodeWzrd,它们是在ASP.NET MVC 2中引入的,并且非常有用,因为它们允许您为必须在每个视图上显示的布局部分定义单独的MVC生命周期。 – 2012-02-17 19:27:28