Получение информации о пользователе с помощью SimpleMembership

Все еще пытаюсь разобраться с новым SimpleMembership с MVC4. Я изменил модель, включив имя и фамилию, которые отлично работают.

Я хочу изменить информацию, отображаемую при входе в систему, поэтому вместо использования User.Identity.Name в представлении я хочу сделать что-то вроде User.Identity.Forename, как лучше всего это сделать?


person user1166905    schedule 24.09.2012    source источник


Ответы (1)


Yon может использовать функцию @Html.RenderAction(), доступную в ASP.NET MVC, для отображения такого рода информации.

Представление _Layout.cshtml

@{Html.RenderAction("UserInfo", "Account");}

Просмотреть модель

public class UserInfo
{
    public bool IsAuthenticated {get;set;}
    public string ForeName {get;set;}
}

Контроллер аккаунта

public PartialViewResult UserInfo()
{
   var model = new UserInfo();

   model.IsAutenticated = httpContext.User.Identity.IsAuthenticated;

   if(model.IsAuthenticated)
   {
       // Hit the database and retrieve the Forename
       model.ForeName = Database.Users.Single(u => u.UserName == httpContext.User.Identity.UserName).ForeName;

       //Return populated ViewModel
       return this.PartialView(model);
   }

   //return the model with IsAuthenticated only
   return this.PartialView(model);
}

Просмотр сведений о пользователе

@model UserInfo

@if(Model.IsAuthenticated)
{
    <text>Hello, <strong>@Model.ForeName</strong>!
    [ @Html.ActionLink("Log Off", "LogOff", "Account") ]
    </text>
}
else
{
    @:[ @Html.ActionLink("Log On", "LogOn", "Account") ]
}

Это делает несколько вещей и предоставляет некоторые опции:

  1. Избавляет ваше представление от необходимости обнюхивать HttpContext. Пусть этим занимается контролер.
  2. Теперь вы можете комбинировать это с [OutputCache], поэтому вам не нужно отображать его на каждой отдельной странице.
  3. Если вам нужно добавить что-то еще на экран UserInfo, это так же просто, как обновить ViewModel и заполнить данные. Никакой магии, ViewBag и т.д.
person Leniel Maccaferri    schedule 04.10.2012