在尝试了一整天的模型绑定后,没有结果,我决定在这里问。
我有一个 asp.net razor 视图,用户(又名卖家)可以在其中编辑他的用户详细信息。此外,用户应该能够更改他的密码。
我做了一个视图模型:
public class EditSellerViewModel
{
public Seller Seller { get; set; }
public ChangePasswordModel ChangePasswordModel { get; set; }
}
我的视图有两种形式,导致两个“提交”按钮。在我的操作中,我检查单击了哪个按钮。如果已提交“密码”表单,我想在卖方实体(实际有效)和 SaveChanges() 中设置新密码,这不会更改数据库中的任何内容(并且不会引发任何异常)。它根本什么都不做。
此外,如果提交了“卖家详细信息”表格,我想保存卖家数据。但 TryUpdateModel 始终为假,即使我使用启用 ViewModel 前缀的第二个参数。
[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);
}
这里有一些调试信息截图:
请问有人可以帮我吗?