我有一个具有用户表单身份验证的ASPX MVC 4 C#Web应用程序。用户登录后,我想在任何经过身份验证的页面上显示Welcome [user]消息。我知道 User.Identity.Name 会提取用户名,但我想从其他字段中获取需要自定义查询的信息。
如何在所有网页上显示欢迎讯息?
我尝试使用Partial文件,但这让我无处可去。这应该是更容易的事情之一...基于登录用户可变地将字符串传递到每个页面,但是从我的搜索中它不是。
我通常会提供一些代码,但我不确定是否有太多要显示的内容,或多或少需要一个指针或正确方向的好例子。
非常感谢
答案 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,它们与会话相同,只是它们不会使服务器端过载。如果需要,你可以使它们过期