我使用Forms身份验证和SimpleMembershipProvider进行MVC 4项目设置。在我的用户表中,我有一些其他属性,如电子邮件,名字,姓氏等
如何在Razor视图中访问当前登录用户的个人资料?
我已经尝试创建一个BaseController,然后让其他控制器继承它,就像这样。
public class BaseController : Controller
{
public UserProfile CurrentUser;
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
if (this.HttpContext.User.Identity.IsAuthenticated)
{
var context = new UsersContext();
var user = context.UserProfiles.SingleOrDefault(u => u.UserName == WebSecurity.CurrentUserName);
CurrentUser = user;
}
}
}
然后在HtmlExtension方法中;
public static class HtmlExtensions
{
public static UserProfile CurrentUser(this HtmlHelper htmlHelper)
{
var controller = htmlHelper.ViewContext.Controller as BaseController;
if (controller == null)
{
throw new Exception("The controller used to render this view doesn't inherit from BaseController");
}
return controller.CurrentUser;
}
}
但是,如果我尝试检索用户的属性,例如
,则不起作用@Html.CurrentUser.Firstname
答案 0 :(得分:0)
您必须在namespace
- >上设置HtmlExtensions
课程的system.web.webPages.razor
。 pages
- >在namespace
文件夹内的web.config文件上的View上可以看到Views
个标签,用于示例:
<system.web.webPages.razor>
<!-- other tags -- >
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="System.Configuration" />
<add namespace="MyWebApplication.Extensions"/> <!-- this is a custom namespace -->
</namespaces>
</pages>
</system.web.webPages.razor>
我还建议您使用GlobalFilter来填充CurrentUser属性。