不知何故,此更新代码无效:
这是我的控制器代码:
private UserRepository repo = new UserRepository();
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, UserInfo user_)
{
try
{
repo.UpdateUser(user_);
return RedirectToAction("Index");
}
catch
{
return View();
}
}
这是上面使用的repo代码(UserRepository)
private UsersDataContext db = new UsersDataContext();
public void UpdateUser(UserInfo user_)
{
UserInfo origUser = GetUser(user_.Id);
origUser.First = user_.First;
origUser.Last = user_.Last;
origUser.City = user_.City;
origUser.Country = user_.Country;
origUser.State = user_.State;
origUser.Street_Address = user_.Street_Address;
db.SubmitChanges();
}
public UserInfo GetUser(int id_)
{
return db.UserInfos.SingleOrDefault(d => d.Id == id_);
}
修改
请注意,当调试一切正常时(没有例外),但当它重定向回Index时,数据在更新时发生更改时尚未更新。
答案 0 :(得分:1)
我刚刚将userrepository更改为以下内容:
private UsersDataContext db = new UsersDataContext();
public void UpdateUser(UserInfo user_)
{
UserInfo origUser = db.UserInfos.SingleOrDefault(d => d.Id == id_);
origUser.First = user_.First;
origUser.Last = user_.Last;
origUser.City = user_.City;
origUser.Country = user_.Country;
origUser.State = user_.State;
origUser.Street_Address = user_.Street_Address;
db.SubmitChanges();
}
所以我所做的就是内联移动GetUser()方法并且它有效。
它可能是一个红色的鲱鱼,它只是一个缓存问题。
答案 1 :(得分:0)
你没有提到你如何定义UserInfo,它是一个结构还是一个类?
如果它是一个结构,从GetUser返回它将创建一个新对象,因此你不会更新数据库对象,只更新它的本地副本。
内联移动GetUser可以避免创建临时副本,这可能就是它的工作原理。
afaik你可以做点什么
public void GetUser(int id_, out UserInfo user_)
{
user_ = db.UserInfos.SingleOrDefault(d => d.Id == id_);
}
然后你会像这样称呼它
public void UpdateUser(UserInfo user_)
{
UserInfo origUser;
GetUser(user_.Id, out origUser);
origUser.First = user_.First;
origUser.Last = user_.Last;
origUser.City = user_.City;
origUser.Country = user_.Country;
origUser.State = user_.State;
origUser.Street_Address = user_.Street_Address;
db.SubmitChanges();
}
答案 2 :(得分:0)
也许你禁用了对象跟踪?