2017-05-30 13 views
0

ユーザー用の編集ページがありますが、これはGETで問題なく動作しますが、POST AplicationUserオブジェクトはデータベースに保存されません。私はいくつかのオブジェクトフィールドがnullであると言いますが、POSTメソッドに正常に渡されます。ApplicationUserクラスを使用してユーザーデータを更新する - ASP.NET ID

私は声明場合、それがヌルだ場合には、データベースの列に対応する各プロパティの値を代入しようとしたが、私はUpdating user data - ASP.NET Identity二答え(JoshdeVriesことを考え出し、エラーなしのいずれか..
を問題を解決していないこと)は私の場合に関連するかもしれません。

A photo with the Object in Debugging mode

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit([Bind(Include = "Id,Name,Email,Password,ConfirmPassword,Roles,PhoneNumber")] ApplicationUser editUserModel) 
    { 
     if (ModelState.IsValid) 
     { 

      var store = new UserStore<ApplicationUser>(new ApplicationDbContext()); 
      var manager = new UserManager<ApplicationUser>(store); 
      var result manager.Update(editUserModel); 
      if (!result.Succeeded) // This is false, so Update Failed! 
      { 
       Console.WriteLine(result.Errors.ToList()); 
       return View(editUserModel); 
      } 
      store.Context.SaveChanges(); 
      return RedirectToAction("UsersList"); 
     } 
     return View(editUserModel); 
    } 

そして、この(私は複数のフィールドを埋めるために必要があるが、これら3は、テストのためのものである)のようなビューの3つの入力フィールド:私は適用

<div class="form-group"> 
     @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) 
     </div> 
</div> 

<div class="form-group"> 
     @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

<div class="form-group"> 
     @Html.LabelFor(model => model.PhoneNumber, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.PhoneNumber, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.PhoneNumber, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
+0

ビューにバインドした唯一の値が3つある場合は、EFが一致するエンティティを見つけるための十分な情報を投稿していません。 –

+0

これを修正するには? Eメールアドレスは確かにユニークですが、EFはそれを見つけることができるはずです。 –

+0

そのフィールドが主キーフィールドとしてマークされている場合のみ。これを「修正」する正しい方法は、データモデルをビューモデルとして使用しないことです。 –

答えて

0

[PS]ソリューションこれまでのところ、うまくいきました。

何らかの理由で、「UserName」はユーザ行を識別する必須のKeyの一種です。