c# - ViewModel 更新 - 保存前更改属性

标签 c# asp.net-mvc-3 entity-framework razor

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

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

我制作了一个 ViewModel:

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

我的 View 有两种形式,它们产生了两个“提交”按钮。在我的操作中,我检查单击了哪个按钮。如果已提交“密码”表单,我想在卖方实体(实际有效)和 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);
    }

这里是一些调试信息截图:

谁能帮帮我?

最佳答案

请参阅有关 TryUpdateModel 的文档,它说“使用来自 Controller 的当前值提供程序和前缀的值更新指定的模型实例。”

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

尝试使用不带“前缀”参数的 TryUpdateModel(seller) 简单方法。

if(TryUpdateModel(seller))

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

关于c# - ViewModel 更新 - 保存前更改属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14320457/

相关文章:

c# - Entity Framework (EF6) 插入或更新属性(如果存在)

C# 无法从 DbContext 中删除对象

C#:如何在 ListView 中编辑项目和子项目?

c# - 使用 JSON 将继承的对象传递给 WCF 服务

asp.net - 是否可以在同一项目上运行 3.5 ASP.NET Web 表单和 MVC 3.0

asp.net - MVC3 项目中 Url.Action 中空对象引用的问题

javascript - 如何检测 "device mode"(MVC3 + Bootstrap)

c# - 当 DataSource 未返回完整结果集时手动设置 GridView 的 PageCount?

c# - 在 win 10 通用应用程序中使用 mvvm-light 导航服务时,无法将页面类型的对象转换为类型 'Windows.UI.Xaml.Controls.Frame'

c# - 如何在 Entity Framework 中进行 "in"查询?