【问题标题】:UserProfile changes does not save ASP.NET MVCUserProfile 更改不保存 ASP.NET MVC
【发布时间】:2012-11-03 06:50:45
【问题描述】:

我想让用户可以更改他的个人资料详细信息(除了 UserId、用户名和密码(密码在另一个视图中更改))

所以在我的方法中,当我这样做时

    public void SaveUser(UserProfile user)
    {
        context.Entry(user).State = System.Data.EntityState.Modified;
        context.SaveChanges();
    }

我收到错误消息存储更新、插入或删除语句影响了意外的行数 (0)。之后我浏览了stackoverflow,有人建议用另一种方式制作它,所以我编辑了我的SaveUser方法

        public void SaveUser(UserProfile user)
     {
        var objectContext = ((System.Data.Entity.Infrastructure.IObjectContextAdapter
                   )context).ObjectContext;
        try
        {
            objectContext.SaveChanges();
        }
        catch (OptimisticConcurrencyException)
        {
            objectContext.Refresh(RefreshMode.ClientWins, context.UserProfiles);
            objectContext.SaveChanges();
        }
     }

在这些更改之后,我不再收到此错误,但是我的个人资料详细信息没有更改。

我的 HttpPost 编辑方法(HttpGet 检索到正确的信息)

[HttpPost]
    public ActionResult Edit(UserProfile user)
    {
        if (ModelState.IsValid)
        {
            repository.SaveUser(user);
            return View(user);
        }
        return View();
    }

在我的编辑视图中,我只有 LabelFor 和 EditorFor 的所有内容(Id、用户名和密码除外)和提交按钮。

整天都在尝试解决这个问题,但还没有成功。

【问题讨论】:

  • 如果您在 post 方法中的用户对象没有设置 Id,模型绑定将不起作用(也不会更新任何内容)。
  • 那么,我是否应该不传递 UserProfile 对象,而是传递 Id,然后找到传递了 Id 的用户?还是我弄错了?

标签: asp.net asp.net-mvc asp.net-mvc-3 entity-framework entity-framework-4


【解决方案1】:

您用户的主键UserId 属性值很可能是0,因为您没有在视图中使用UserId。然后,您尝试使用在数据库中不存在并导致异常的键值 0 更新实体。

在您的视图中放置一个隐藏的表单字段,该字段在客户端和服务器之间来回传递用户的UserId

@Html.HiddenFor(model => model.UserId)

通常,如果您使用默认路由,您应该有一个路由http://www.mysite.com/{controller}/{action}/{id}。如果 url 是 http://www.mysite.com/User/Edit/3 MVC 尝试将值 3 绑定到名称为 id 的属性(大写或小写无关紧要)。您的更新应该可以工作。但我猜你在User 中的主键属性不是Id,而是别的东西——比如UserId。在这种情况下,模型绑定器无法找到您的键属性并将其值保留为默认值 (= 0)。

因此,作为隐藏字段的替代方法,您可以将用户的键属性命名为 Id 或专门使用 UserId 作为参数的路由。

【讨论】:

  • 感谢您的提示!以另一种方式解决了它,但仍然有一个问题是缺少 Id..
猜你喜欢
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 2017-10-26
相关资源
最近更新 更多