ViewModel更新-在保存之前更改属性

本文关键字:属性 保存 更新 ViewModel | 更新日期: 2023-09-27 17:53:10

在尝试了一整天的模型绑定后,没有结果,我决定在这里问一下。

我有一个asp.net剃刀视图,其中一个用户(又名卖方)可以编辑他的用户详细信息。此外,用户应该能够更改他的密码。

我创建了一个ViewModel:

public class EditSellerViewModel
{
    public Seller Seller { get; set; }
    public ChangePasswordModel ChangePasswordModel { get; set; }
}

我的视图有两个表单,导致两个"提交"按钮。在我的操作中,我检查哪个按钮被点击了。如果"密码"表单已经提交,我想在卖方实体(实际工作)和SaveChanges()中设置新密码,这不会改变数据库中的任何东西(并且不会抛出任何异常)。它什么也不做。

此外,如果提交了"卖方详细信息"表单,我想保存卖方数据。但是TryUpdateModel总是false,即使我使用第二个参数启用ViewModels的前缀。

    [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);
    }

下面是一些调试信息截图:

  • 收货和卖方提交的表格
  • 已提交密码表单的formcollection
有谁能帮帮我吗?

ViewModel更新-在保存之前更改属性

参见关于TryUpdateModel的文档,它说"使用来自控制器当前值提供程序的值和前缀更新指定的模型实例。"

在值提供程序中查找值时使用的前缀。

尝试使用不带"prefix"参数的TryUpdateModel(seller)简单方法。

if(TryUpdateModel(seller))

http://msdn.microsoft.com/en-us/library/dd493137 (v = vs.108) . aspx