MVC在经过身份验证的页面上显示已验证的用户信息

时间:2014-02-04 19:30:02

标签: c# asp.net-mvc asp.net-mvc-4

我有一个具有用户表单身份验证的ASPX MVC 4 C#Web应用程序。用户登录后,我想在任何经过​​身份验证的页面上显示Welcome [user]消息。我知道 User.Identity.Name 会提取用户名,但我想从其他字段中获取需要自定义查询的信息。

如何在所有网页上显示欢迎讯息?

我尝试使用Partial文件,但这让我无处可去。这应该是更容易的事情之一...基于登录用户可变地将字符串传递到每个页面,但是从我的搜索中它不是。

我通常会提供一些代码,但我不确定是否有太多要显示的内容,或多或少需要一个指针或正确方向的好例子。

非常感谢

4 个答案:

答案 0 :(得分:1)

要获取用户对象上的其他字段,您可以使用以下内容:

Membership.GetUser(UserName)

并将消息存储在一个视图包中,您可以在所有视图中使用该视图。

答案 1 :(得分:1)

您可以在Session中存储信息,拧紧ViewBag。您可以在Global.asax文件中设置会话属性。您应该在Global.asax中看到和OnSessionStart方法。 所以你可以说

 protected void Session_OnStart()
    { 
       //Whatever is defaulted here
       System.Web.HttpContext.Current.Session["blah"] = "Your User Name"
    }

然后在共享布局文件夹_Layout中,如果您想要调用它,则默认为“母版页”。您可以随意调用它

@String.Format("{0}",System.Web.HttpContext.Current.Session["blah"]);

编辑:

您可以使用会话变量的简单方法是创建会话变量类。

namespace YourSession
{
    public static class SessionProperties
   {       
      public static UserAccount UserAccountx
    {
        get
        {
            return (UserAccount)HttpContext.Current.Session["UserAccount"];
        }
        set
        {
            HttpContext.Current.Session["UserAccount"] = value;
        }
    }
   }

}

然后在你的onStart()方法中你可以说

 YourSession.SessionProperties.UserAccountx = "Get User Account Method or w.e";

然后在你看来它将是

@String.Format("{0}",YourSession.SessionProperties.UserAccountx);

答案 2 :(得分:0)

虽然C Sharper指出了一个潜在的解决方案,但起初我觉得有用,我认为这不是我想要的确切解决方案。原因是如果我在同一会话中以新用户身份注销然后重新登录,则会话未更新,因为会话已加载。

这是我做的:

布局主文件

<% if (Request.IsAuthenticated) { %>
      <div class="welcome">Welcome, <%: Html.Action( "GetUserInfo", "Member" ) %></div>
<% } %>

GetUserInfo是成员控制器中的ActionResult

会员控制

public ActionResult GetUserInfo()
{
    string userInfo = "";

    using (EntityObject db = new EntityObject())
    {
        var account = db.table_name.FirstOrDefault(u => u.UserID == User.Identity.Name);
        userInfo = account.UserDataToDisplay;
    }

    return Content(userInfo);
}

*为了描述的目的,我确实将实际的项目名称更改为更通用。

这样做完全符合我的要求。我在一个控制器下有一个方法,母版页上的一行代码在用户通过身份验证后显示相关信息。

简单易行。花了一段时间来搞清楚。

答案 3 :(得分:0)

您可以使用Cookie,它们与会话相同,只是它们不会使服务器端过载。如果需要,你可以使它们过期