作者:心语忆录_288 | 来源:互联网 | 2023-10-10 15:53
实体Index,属性有ID,Content,CreateDate实体Detail,属性有ID,IndexID,CargoName其中,实体Detail中的IndexID是外键。Deta
实体Index,属性有ID,Content,CreateDate
实体Detail,属性有ID,IndexID,CargoName
其中,实体Detail中的IndexID是外键。Detail和Index是多对一关系。
问题,我先描述一下。
若只需要保存Index的数据,那么视图上放3个对应的控件,名称与字段名一致,保存时序列化成ID=1&COntent=2&CreateDate=2012-08-15,传入控制器中。
而控制器中的保存方法,参数是Index实体的实例。会将序列化数据转换成Index实体,而后只需要新增该实体即可。
如:
function saveIndex() {
if ($('#fm').valid()) {
$.post(url, $("#fm").serialize() + '&' + $("#fm").serializeDisabled(), function (result) {
if (result.success) {
$.messager.alert('提示', '数据已保存!');
Javascript: $('#dlg').dialog('close')
$('#dg').datagrid('reload'); // 刷新数据
} else {
$.messager.alert('提示', '数据保存出现错误!', 'error');
}
}, 'json');
}
}
///
/// 新建-保存
///
///
///
[HttpPost]
public ActionResult Create(Index index)
{
try
{
IndexRepository.Insert(index);
return Json(new { success = true });
}
catch (Exception e)
{
return Json(new { msg = "服务出现错误." });
}
}
但是现在,视图中的控件,不仅仅是Index实体的,也有Detail实体的(就是那个CargoName)。
我希望控制器中的保存方法中的参数是Index index,List
detail,然后先新增index,返回新增后的主键ID,再循环赋值给detail中的IndexID字段,最后新增detail。
关键问题,js中还是把控件序列化,再传入控制器吗?
如果是这样,那控制器中该怎么写?如果不是,请问js和控制分别该怎么写?
以及怎么获得“刚新增”的记录的主键ID?
分不多,只有40分,希望能有人帮助我解开这个疑惑。先谢谢了。
7 个解决方案
你可以搞一个综合性的实体来接受,单独定义一个,根据你的需要
当你
db.BIF.AddObject(model);
db.SaveChanges();
之后,该model已经更新
此时model.ID就是刚刚插入的ID
单独的model,如果是EF的话,完全可以用映射来的表模型,不必创建
如果有特殊需要,那么可以考虑创建一个符合需求的Model,你比如说,有张表,字段太多,那么我的需求是更新其中 的某几个字段,那么可以搞一个小型的Model,保证页面在提交请求时的模型最小话
当然,如果一个页面涉及到多个实体模型,那么可以采用综合性model的方式,也可以分成不同的表单,然后分别提交,互不影响,都是以个人需求而定
非常感谢 Return_false
问题解决了,不过有新的问题出现,我重开个帖子吧,多用点分~
新帖地址:http://topic.csdn.net/u/20120815/13/55d36e19-c8cd-4f5e-9af4-6956a384b3cc.html