ASP.NET MVC отображает имя пользователя из профиля - PullRequest
3 голосов
/ 27 октября 2010

Ниже приведен пользовательский элемент управления LogOn из стандартного проекта ASP.NET MVC по умолчанию, созданного Visual Studio ( LogOnUserControl.ascx ):

<%@ 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>

Код <%: Page.User.Identity.Name %> отображает имя пользователя пользователя, который в данный момент вошел в систему.

Каквместо этого отобразить FirstName пользователя, который сохраняется в профиле?

Мы можем прочитать его в контроллере следующим образом:

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

Если мы, например,попробуйте сделать это следующим образом:

<%: ViewData["FirstName"] %>

Отображается только на той странице, которая была вызвана контроллером, которому было присвоено значение ViewData["FirstName"].

1 Ответ

11 голосов
/ 27 октября 2010

бэр

это один из тех случаев, когда наличие базового контроллера решило бы «все» ваши проблемы (ну, в любом случае, некоторые) в вашем базовом контроллере у вас будет что-то вроде:

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
}

или аналогичный. тогда он всегда будет доступен для каждого действия на всех контроллерах.

посмотрите, работает ли он для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...