モデルバインディングで一日中試した後、結果が得られなかったので、ここで質問することにしました。
ユーザー (別名販売者) がユーザーの詳細を編集できる asp.net かみそりのビューがあります。さらに、ユーザーは自分のパスワードを変更できる必要があります。
ViewModel を作成しました。
public class EditSellerViewModel
{
public Seller Seller { get; set; }
public ChangePasswordModel ChangePasswordModel { get; set; }
}
私のビューには、2 つの「送信」ボタンが表示される 2 つのフォームがあります。私のアクションでは、どのボタンがクリックされたかを確認します。「パスワード」フォームが送信された場合、販売者エンティティに新しいパスワードを設定し (実際には機能します)、データベース内の何も変更しない (そして例外をスローしない) SaveChanges() を設定します。それは単に何もしません。
さらに、「Seller Detail」フォームが送信された場合、Sellers データを保存したい。ただし、ViewModel のプレフィックスを有効にする 2 番目のパラメーターを使用しても、TryUpdateModel は常に false です。
[HttpPost]
public ActionResult EditUser(string btnSubmit, FormCollection formValues, EditSellerViewModel editSellerViewModel)
{
int uid = baseFunc.GetIdForUsername(User.Identity.Name);
var seller = bmDBCont.SellerSet.Single(s => s.Id == uid);
if (btnSubmit == "saveSellerPassword")
{
seller.Password = editSellerViewModel.ChangePasswordModel.NewPassword;
bmDBCont.ObjectStateManager.ChangeObjectState(seller, System.Data.EntityState.Modified);
bmDBCont.SaveChanges(); //<-- does nothing
}
if (TryUpdateModel(seller, "Seller")) //<-- never true
{
bmDBCont.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.Titles = CommonListsProvider.GetTitles();
ViewBag.Countries = CommonListsProvider.GetCountries();
return View(editSellerViewModel);
}
ここにいくつかのデバッグ情報のスクリーンショットがあります:
誰でも私を助けることができますか?