热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MVC,实体保存问题

实体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 个解决方案

#1


/// 
        /// 新建-保存
        /// 

        /// 
        /// 
        [HttpPost]
        public ActionResult Create(类 类名)
        {
            try
            {
                IndexRepository.Insert(index);
                return Json(new { success = true });
            }
            catch (Exception e)
            {
                return Json(new { msg = "服务出现错误." });
            }
        }

使用jquery forms 插件
的ajaxSumit提交

#2


你可以搞一个综合性的实体来接受,单独定义一个,根据你的需要

当你
db.BIF.AddObject(model);
db.SaveChanges();
之后,该model已经更新

此时model.ID就是刚刚插入的ID

#3


引用 1 楼  的回复:
/// 
        /// 新建-保存
        /// 

        /// 
        /// 
        [HttpPost]
        public ActionResult Create(类 类名)
  ……


是你没理解我的问题吗?
现在是2个类,你的参数里只有1个类,能干嘛~

#4


引用 2 楼  的回复:
你可以搞一个综合性的实体来接受,单独定义一个,根据你的需要

当你
db.BIF.AddObject(model);
db.SaveChanges();
之后,该model已经更新

此时model.ID就是刚刚插入的ID


噢,用综合性的实体,这个可以。但是这种情况,也就是主从表的情况,每次都得建立综合性的实体吗?

另外,获取ID我明白了,谢谢你啊。

#5


#6


单独的model,如果是EF的话,完全可以用映射来的表模型,不必创建

如果有特殊需要,那么可以考虑创建一个符合需求的Model,你比如说,有张表,字段太多,那么我的需求是更新其中 的某几个字段,那么可以搞一个小型的Model,保证页面在提交请求时的模型最小话

当然,如果一个页面涉及到多个实体模型,那么可以采用综合性model的方式,也可以分成不同的表单,然后分别提交,互不影响,都是以个人需求而定

#7


非常感谢 Return_false
问题解决了,不过有新的问题出现,我重开个帖子吧,多用点分~
新帖地址:http://topic.csdn.net/u/20120815/13/55d36e19-c8cd-4f5e-9af4-6956a384b3cc.html

推荐阅读
author-avatar
心语忆录_288
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有