如何访问当前用户 ASP.net MVC4 的 SimpleMemberShipprovider 属性

Posted

技术标签:

【中文标题】如何访问当前用户 ASP.net MVC4 的 SimpleMemberShipprovider 属性【英文标题】:How to AccessSimpleMemberShipprovider properties of current user ASP.net MVC4 【发布时间】:2012-09-25 20:43:34 【问题描述】:

我在 MVC4 中有一个 razor .cshtml 视图,我想打印我的 userprofile 类的一个字段。我知道我可以从 User.Identity.Name 获取用户名,但我不知道如何在部分中访问当前登录用户的其他属性。我是否需要在我的控制器中执行此操作并在我的视图中引用它?如果是这样,是否有一个可用于所有视图的控制器,所以我没有在每个控制器中设置这个变量?是否有一种简单的方法可以访问视图中 UserProfile 模型类中定义的当前用户属性?给出一些上下文。我有我的模型...

 public class UserProfile
    
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int UserId  get; set; 
        public string UserName  get; set; 

        //Added to round out requirements for site user profile
        public string FirstName  get; set; 
        public string LastName  get; set; 
        public string Site  get; set; 
    

我需要访问视图中的 FirstName。如果我在控制器中获取它,那么我将需要在所有控制器中执行它,因为这是所有页面的页面部分。

【问题讨论】:

【参考方案1】:

我决定将它放在会话变量中,因为它不是关键、敏感或影响应​​用程序的稳定性。在我的登录或注册控制器中,我将会话变量设置为...

var context = new UsersContext();
var curuser = context.UserProfiles.First(p => p.UserName == model.UserName);
Session["FName"] = curuser.FirstName;

我从 Pro ASP.NET MVC 和 this 帖子中得到了这个。在我的 Razor 视图中,我使用来自 this 帖子的这个。

@HttpContext.Current.Session["FName"].ToString()

【讨论】:

【参考方案2】:

在为局部视图提供服务的控制器操作中,将 FirstName 放入 ViewBag。 如果您想返回更多属性,请为它们创建一个 ViewModel 并让控制器操作返回该属性。

【讨论】:

因为这是所有站点页面上的部分内容,并且来自不同的控制器,所以我需要在所有控制器中执行此操作。我想我可以,但我一直在寻找一种方法来做到这一点。就像在 Rails 中一样,有一个 application_controller 可供所有视图访问,因此其中的任何变量都是站点范围的。

以上是关于如何访问当前用户 ASP.net MVC4 的 SimpleMemberShipprovider 属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Asp.net MVC4 中避免回发

vs2012发布asp.net mvc4的网站到iis上,发布后在访问数据库的地方出错?

如何从当前用户检索(Jwt)访问令牌并将其传递给 asp.net 样板(abp)中的移动应用程序?

asp.net核心未绑定当前用户

使用 MVC4 asp.net 随机注销

在 MVC4 RTM 中从 ASP.NET 成员身份迁移到 SimpleMembership