Je me suis retrouvé coincé avec un petit problème comme - éditer les propriétés du modèle en utilisant Entity Framework.Modification d'informations utilisateur à l'aide d'Identity2
1) Alors, commençons - Je veux modifier la propriété "PacientInfo"
public class RegisterViewModel
{
[Required]
[EmailAddress]
[Display(Name = "Адрес электронной почты")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "Значение {0} должно содержать не менее {2} символов.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Пароль")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Подтверждение пароля")]
[Compare("Password", ErrorMessage = "Пароль и его подтверждение не совпадают.")]
public string ConfirmPassword { get; set; }
public string Name { get; set; }
public string PacientInfo { get; set; }
}
2) Et j'ajouté une logique de base pour modifier cette propriété: GET + méthode POST
[HttpGet]
public ActionResult EditPacientInfo(string email)
{
var UserManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
ApplicationUser appUser = new ApplicationUser();
appUser = UserManager.FindByEmail(email);
PacientEdit user = new PacientEdit()
{
Email = appUser.Email,
PacientInfo = appUser.PacientInfo
};
if (email== null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
ApplicationUser pacient = db.Users.Find(email);
if (pacient == null)
{
return HttpNotFound();
}
return View(pacient);
}
[HttpPost]
public ActionResult EditPacientInfo(ApplicationUser model)
{
var UserManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
if (ModelState.IsValid)
{
ApplicationUser u = UserManager.FindById(model.Id);
u.Email = model.Email;
u.PacientInfo= model.PacientInfo; // Extra Property
UserManager.Update(u);
return RedirectToAction("Index");
}
return View(model);
}
3) et a essayé de personnaliser mon "EditInfoMethod" `vue s:
@model med_projec_roles_added.Models.RegisterViewModel
@{
ViewBag.Title = "EditPacientInfo";
}
@model med_projec_roles_added.Models.ApplicationUser
<h2>Pacient , @Model.Email</h2>
@using (Html.BeginForm())
{
@Html.LabelFor(model => model.PacientInfo, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.PacientInfo)
@Html.ValidationMessageFor(model => model.PacientInfo)
</div>
}
4) et n OW le principal problème: Je vous écris dans l'adresse adresse de bar qui devait passer à travers la méthode GET - mais je continue à attraper cette exception:
5) Si vous pouvez le voir dans ma base de données - cet e-mail est déjà créé et supposé exister:
6) Pour conclure - J'ai essayé différentes méthodes pour changer "EditPacientInfo" correctement, mais je ne peux pas faire ou trouver la bonne décision par Internet. Je serais heureux si vous pouviez trouver/écrire des choses qui pourraient vraiment m'aider dans cette situation (merci à vous tous (et désolé pour l'anglais pas si bon aussi ^^))
Certaines choses pour vous d'essayer: 1) Dans l'action HttpGet, changer '' chaîne email' à chaîne id' 2) Ajouter [FromRoute] comme 'publique ActionResult EditPacientInfo ([FromRoute] chaîne email) ' 3) Encodez votre e-mail: [email protected] à aaa% 40bbb.com.br Cordialement. – dime2lo
Merci, Beaucoup tout le monde j'ai trouvé quelques réponses utiles qui m'a aidé à résoudre ce problème: https://stackoverflow.com/questions/22955872/editing-user-profile-details https://stackoverflow.com/questions/ 24343246/asp-net-identity-plusieurs-objets-ensembles-par-type-ne sont pas supportés - si vous avez un problème avec la base de données Identity 2 -> cela résoudra le problème avec l'auto-échafaudage – clyde