In der ASP.Net MVC 5
kann die ApplicationUser
erweitert werden, um benutzerdefinierte Eigenschaft zu haben. Ich habe es so erweitert, dass es jetzt eine neue Eigenschaft hat DisplayName
genannt:Wie erhält man den benutzerdefinierten Eigenschaftswert des ApplicationUser in der ASP.Net MVC 5 View?
// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
public class ApplicationUser : IdentityUser {
public string ConfirmationToken { get; set; }
public string DisplayName { get; set; } //here it is!
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) {
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
Ich habe auch die Datenbanktabelle mit Update-Database
Befehl in den Package-Manager Console
in Visual Studio
aktualisiert, um die Konsistenz zwischen den ApplicationUser
class
und der AspNetUsers
Tabelle zu gewährleisten. Ich habe bestätigt, dass die neue Spalte DisplayName
jetzt in der Tabelle AspNetUsers
vorhanden ist.
Jetzt möchte ich, dass DisplayName
anstelle der Standard verwenden UserName
für den Text in der Original _LoginPartial.cshtml
View
. Aber wie Sie sehen können:
<ul class="nav navbar-nav navbar-right">
<li>
@Html.ActionLink("Hello " + User.Identity.GetUserName() + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })
</li>
<li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li>
</ul>
Die ursprüngliche _LoginPartialView.cshtml
wird User.Identity.GetUserName()
mit dem UserName
des ApplicationUser
zu bekommen. Die User.Identity
hat GetUserId
und auch Name
, AuthenticationType
, etc ... Aber wie bekomme ich meine DisplayName
für die Anzeige?
Dies scheint vielversprechend ... wo platzieren Sie normalerweise Ihre 'IdentiyExtensions' Methode? In der 'IdentityModels.cs'? Oder würden Sie eine neue Datei mit bestimmter Namenskonvention dafür erstellen? – Ian
Ich würde eine neue Datei mit dem Namen "IdentityExtensions.cs" erstellen, wahrscheinlich in einem Ordner namens "Helpers" – tmg
Danke für Ihre Antwort! Es klappt! Ich mache jedoch eine kleine Änderung ... anstatt Return 'claim.FindFirst (" DisplayName ")' 'zurückzugeben, gebe ich' return claim.FindFirst ("DisplayName") zurück. ToString(). Substring (("DisplayName:"). Length); '- weil' claim.FindFirst ("DisplayName") 'vom Typ' Claim' ist, aber 'return' muss eine' string' sein. Wenn ich den 'Substring' nicht anschließe, wird' DisplayName: myname' anstelle von 'myname' angezeigt. – Ian