如何访问当前用户 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 属性的主要内容,如果未能解决你的问题,请参考以下文章
vs2012发布asp.net mvc4的网站到iis上,发布后在访问数据库的地方出错?