1
おはよう、ASP.NET IDでUserManagerを更新するには?
私はasp.net Identity 2.0 MVC5でパスワードを作成し、ログイン時にパスワードを割り当てます。ユーザーに自分のアカウントを作成(更新)するように指示しました。
すべてが順調でしたが、ユーザーが更新を送信すると、データベースに反映されません。私のコードで正しいロジックが見当たりません。ここに私のViewModelとコントローラがあります。
お願いします、お願いします。
public class EditUserViewModel
{
[Key]
public string Id { get; set; }
[Required]
[Display(Name = "Surname")]
public string FirstName { get; set; }
[Required]
[Display(Name = "Last Name")]
public string LastName { get; set; }
[Required]
[Display(Name = "Username")]
public string Username { get; set; }
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 8)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
[Display(Name = "Gender")]
public string Gender { get; set; }
[Required]
[Display(Name = "Mobile Phone")]
public string PhoneNumber { get; set; }
//[Required]
[Display(Name = "Birthday - yyyy/mm/dd")]
public DateTime DateOfBirth { get; set; }
//public DateTime PostedDate { get; set; }
}
Controller:
[HttpGet, ActionName("profile")]
public ActionResult Edit()
{
return View();
}
[HttpPost, ActionName("profile")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit(EditUserViewModel editUser)
{
if (ModelState.IsValid && TempData["Username"] != null)
{
var user = await UserManager.FindByNameAsync(editUser.Username);
if (user == null)
{
return HttpNotFound(); //change error later
}
user.FirstName = editUser.FirstName;
user.LastName = editUser.LastName;
user.UserName = editUser.Email;
user.Email = editUser.Email;
user.PasswordHash = editUser.Password;
var userUpdated = await UserManager.UpdateAsync(user);
if (!userUpdated.Succeeded)
{
ModelState.AddModelError("", userUpdated.Errors.First());
return View();
}
return RedirectToAction("index", "pages");
}
ModelState.AddModelError("", "Something failed!!!");
return View();
}
ありがとうBobby Caldwell私はパスワードを忘れてしまった。しかし、デバッグ中にエラーが発生しました。var user = UserManager.FindByNameAsync(editUser.Username)がnullです。 –
私は見るので、ユーザーはまだ作成されていないかもしれません。エラーを投げるのではなく、新しいユーザーを作成するだけですか?新しいユーザーが見つからない場合は、新しいユーザーを追加するように回答を更新します。 –
私が達成したいのは、ユーザが自分のプロフィール(ファーストネーム、ラストネーム、ユーザ名、パスワードなど)を、私が彼らに与えたユーザ名とパスワードに対して更新できるページにログインした後にユーザを誘導することです。 –