【发布时间】: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