【问题标题】:ASP.NET MVC displaying user name from a ProfileASP.NET MVC 显示配置文件中的用户名
【发布时间】:2010-10-27 18:47:39
【问题描述】:

以下是由 Visual Studio (LogOnUserControl.ascx) 创建的标准默认 ASP.NET MVC 项目中的 LogOn 用户控件:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%
if (Request.IsAuthenticated) {
%>
Welcome <b><%: Page.User.Identity.Name %></b>!
[ <%: Html.ActionLink("Log Off", "LogOff", "Account") %> ]
<%
}
else {
%> 
[ <%: Html.ActionLink("Log On", "LogOn", "Account")%> ]
<%
}
%>

插入母版页:

<div id="logindisplay">
    <% Html.RenderPartial("LogOnUserControl"); %>
</div>

&lt;%: Page.User.Identity.Name %&gt; 代码显示当前登录用户的登录名

如何显示用户的FirstName,保存在个人资料中?

我们可以在控制器中读取它,如下所示:

ViewData["FirstName"] = AccountProfile.CurrentUser.FirstName;

例如,如果我们尝试这样做:

<%: ViewData["FirstName"] %>

它仅在分配了ViewData["FirstName"] 值的控制器调用的页面上呈现。

【问题讨论】:

标签: asp.net-mvc user-controls master-pages


【解决方案1】:

雷姆,

这是拥有基本控制器可以解决“所有”问题的情况之一(好吧,无论如何都有一些问题)。在你的基本控制器中,你会有类似的东西:

public abstract partial class BaseController : Controller
{
    // other stuff omitted
    protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        ViewData["FirstName"] = AccountProfile.CurrentUser.FirstName;
        base.OnActionExecuted(filterContext);
    }
}

并在您的所有控制器中使用它,例如:

public partial class MyController : BaseController
{
    // usual stuff
}

或类似的。然后,您将始终将其用于所有控制器的每个操作。

看看它是否适合你。

【讨论】:

  • 谢谢,吉姆!很有用。 +1。但是,在这种情况下,我如何确保在用户登录时(此时之后)为 ViewData 分配了“AccountProfile.CurrentUser.FirstName”值?
  • rem - 只要此 AccountProfile 可以通过某种“机制”获得,它就会在我上面 txtd 的覆盖中可用。我知道这一点,因为我以完全相同的方式为我现在正在开发的应用程序上的自定义配置文件执行此操作!事实上,试试吧:)
  • @jimtollan- 我喜欢你的回答。我只想知道 AccountProfile 代表什么?因为我也想在我的系统上实现它但得到一个红色标记..谢谢.. ;)
  • 嗨机器人。 AccountProfile.CurrentUser.FirstName 是我当时在我的代码中的自定义配置文件对象。出于您的目的,我想您可以使用User.Identity.Name
猜你喜欢
  • 1970-01-01
  • 2014-11-30
  • 2014-03-05
  • 2016-09-18
  • 1970-01-01
  • 2012-09-21
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多