2017-08-28 1 views
1

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: Exception

5) Si vous pouvez le voir dans ma base de données - cet e-mail est déjà créé et supposé exister: User database

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 ^^))

+0

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

+0

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

Répondre

0

Je pense que URL dans le navigateur n'est pas dans le bon format. Essayez URL suivante:

localhost:1290/Doctor/[email protected]@gmail.com