2017-07-06 1 views
0

Donc, j'ai ajouté un nouveau paramètre à ma classe ApplicationUser, qui est appelé SocialName. Je voudrais l'afficher lorsque l'utilisateur est connecté, dans le coin supérieur droit. Là-bas, nous avons ce morceau de code:Comment récupérer des données sur l'utilisateur actuel dans ASP .NET MVC?

@Html.ActionLink("Hello, " + User.Identity.GetUserName() + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" }) 

Maintenant, la chose est, je voudrais afficher paramètre autre que le nom d'utilisateur de l'utilisateur actuel. J'ai trouvé le passage du modèle à la vue partielle problématique parce que je dois le faire pour chaque action, sinon je vais avoir Null Référence. Avez-vous des idées pour le faire?

Répondre

1

Vous pouvez facilement afficher des informations sur l'utilisateur en mode partiel par la méthode Html.Action() sans transmettre d'informations à chaque action. Par exemple:

page Votre/layout/...:

<ul class="nav navbar-nav navbar-right"> 
    @Html.Action("HeaderUserInfo", "Common") 
</ul> 

CommonController.cs:

public ActionResult HeaderUserInfo() 
{ 
    var user = _workContext.CurrentUser; //get info about user 
    var model = new HeaderUserInfoModel 
    { 
     Username = user.Username, 
     UserId = user.Id 
    }; 
    return PartialView(model); 
} 

et vue partielle HeaderUserInfo.cshtml:

@model Models.Common.HeaderUserInfoModel 

<span><i class="icon fa fa-user"></i> @Model.Username</span>  
+0

Le ** ** CurrentUser propriété est invalide, il n'existe pas. Dois-je initialiser quelque chose d'autre que la base de données dans le constructeur ** CommonController **? Comme Gestionnaire des utilisateurs? – HostileException

0

Vous pouvez obtenir l'utilisateur de ce code:

ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());

Vous pouvez avoir dans votre contrôleur ou voir ensuite utilisateur avec toutes les propriétés seront disponibles pour vous.