我正在使用telerik网格控件来操纵MVC3下的表格数据。
表中的键是字符串类型的字段。
相关观看代码:
.DataBinding(dataBinding =>
{
dataBinding.Ajax()
.Select("MyTableSelectAjaxEditing", "Maintenance")
.Insert("MyTableInsertAjaxEditing", "Maintenance")
.Update("MyTableSaveAjaxEditing", "Maintenance")
.Delete("MyTableDeleteAjaxEditing", "Maintenance");
})
我的更新方法已映射到此函数:
[AcceptVerbs(HttpVerbs.Post)]
[GridAction]
public ActionResult MyTableSaveAjaxEditing(String id)
{
MyTable myTable = db.MyTable.Find(id);
if (myTable != null)
{
if (TryUpdateModel(myTable))
{
db.SaveChanges();
}
}
return View(new GridModel(db.MyTable));
}
当我更新非关键字段时,一切都很顺利。 当更新密钥(从网格)时,id参数返回NEW值,因此方法开头的Find函数找不到相关记录,并且不会发生更新!
任何帮助都将受到高度赞赏。
谢谢。
答案 0 :(得分:1)
我唯一的建议是使用旧ID创建隐藏列,并将其与其他数据和新ID一起返回。我过去也这样做过。 当然,您必须将旧ID添加到视图模型中 不是最优雅的解决方案,但是当密钥发生变化时,你必须处理这个问题。