La mise à jour de l'utilisateur par UserManager.Mise à jour() dans ASP.NET Identité 2
- Je utiliser ASP.NET Identity 2
dans un MVC 5
projet et je veux mettre à jour Student
données à l'aide de UserManager.Update()
méthode. Cependant, comme je l'ai hériter de ApplicationUser
classe, j'ai besoin de la carte Student
à ApplicationUser
avant d'appeler la méthode de mise à jour. D'autre part, lors de l'utilisation de l'approche que j'ai aussi utilisé pour la création de nouveaux Étudiants, il y a une erreur en raison de la simultanéité comme je créer une nouvelle instance plutôt que de les mettre à jour. Comme je m'ennuie à résoudre le problème en utilisant AutoMapper
, j'ai besoin d'un stable correctif pour résoudre le problème sans AutoMapper
. Pourriez-vous svp me préciser comment résoudre ce problème? Je passe le StudentViewModel
à la méthode de mise à Jour dans le Contrôleur et puis j'ai besoin de la carte d'Étudiant, puis de les transmettre à l' UserManager.Update()
méthode ApplicationUser
. D'autre part je me demande si je devrais récupérer et d'envoyer le mot de passe du Contrôleur de scène au lieu de passer à la Vue pour le problème de sécurité? Pourriez-vous également me renseigner sur ce problème (en cours de mise à Jour d'Utilisateur je n'ai pas de mise à jour de mot de passe et j'ai garder le mot de passe utilisateur dans la base de données). Toute aide serait appréciée.
Les Classes D'Entité:
public class ApplicationUser : IdentityUser<int, ApplicationUserLogin,
ApplicationUserRole, ApplicationUserClaim>, IUser<int>
{
public string Name { get; set; }
public string Surname { get; set; }
//code omitted for brevity
}
public class Student: ApplicationUser
{
public int? Number { get; set; }
}
Contrôleur:
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Update([Bind(Exclude = null)] StudentViewModel model)
{
if (ModelState.IsValid)
{
ApplicationUser user = UserManager.FindById(model.Id);
user = new Student
{
Name = model.Name,
Surname = model.Surname,
UserName = model.UserName,
Email = model.Email,
PhoneNumber = model.PhoneNumber,
Number = model.Number, //custom property
PasswordHash = checkUser.PasswordHash
};
UserManager.Update(user);
}
}
Non, je viens d'utiliser le même tableau (AspNetUsers) et mon Élève entité hérite de ApplicationUser. Est-il une solution plus intelligente que la réponse?
En fait, je suis aux prises avec ce scénario:stackoverflow.com/questions/39304464/...
OriginalL'auteur Willys | 2016-09-17
Vous devez vous connecter pour publier un commentaire.
Il n'est pas nécessaire de passer le
student
commeApplicationUser
à laUserManager.Update()
méthode (parce queStudent
classe hérite (d'où est)ApplicationUser
).Le problème avec ton code, c'est que vous êtes en utilisant
new Student
opérateur, donc la création d'un nouvel élève, plutôt que la mise à jour de l'existant.Modifier le code comme ceci:
Alors peut être que le problème est avec le UserManager. Je crains que ce est en dehors de mon domaine de connaissances, peut-être quelqu'un d'autre va vous aider, bonne chance (j'ai essayé de mon mieux, mais depuis je ne peux pas tester, je vous crois qu'il ne fonctionne pas, donc je vais supprimer la réponse dans quelques minutes).
Ne supprimez pas la réponse. J'ai résolu le problème avec l'aide de votre précieuse aide. Il suffit de changer la première ligne comme var utilisateur = UserManager.FindById(modèle.Id) comme Étudiant; dans ta réponse 🙂 Merci beaucoup...
Pourriez vous s'il vous plaît mettre à jour votre réponse afin que d'autres puissent aussi en bénéficier?
Ah, cool 🙂 c'est Fait avec plaisir, merci.
OriginalL'auteur Ivan Stoev
ma réponse .netcore 1
ce travail pour moi, je l'espère, pourra aider
OriginalL'auteur Nilton Alvarez