开发工具与关键技术: VS , ;MVC多表
作者:刘佳明
撰写时间:2019年 6 月 2 日
因为小编之前对于MVC的新增,修改,删除的功能都不是太明白,之前一直没有具体的讲解关于MVC的主频功能,在这里给补上,
(主要的流程代码并不会做太多的讲述,重要的是在多表中,新增,删除等等要注意的一些外键ID呀,和表格提交的方法)
本次文章的讲解是小编自己编辑的一个多表的MVC练习,表格中所显示的数据一共来源三个表,员工信息表,部门表,职位表,这三个表,其中三个表的关系是属于一对多,我们通过员工本人的信息,即可对员工的姓名,年龄,所属部门,处于什么职位等信息,来进行查询,修改,删除,而所属部门,什么职位等信息, 不能够通过员工的基础信息得到,像具体的部门表,职业表,车间表一些诸如此类的可单独的大表,项目中都是单独构建一个表格来“装” 这些数据,部门表的主键在我们的员工表中作为外键,在员工表中,我们可以通过外键来查询出对应外间信息,查询职位表的原理也是大同小异
如图上例:员工ID为1的员工,所属部门为财务部,职位是财务部的员工;
查询数据
public ActionResult tabCount(LayuiTablePage layuiTablePage, string EmployeeNumberID, int DeoartmentNameID, int PositionNameID)
以上代码中,在控制器中,编辑查询表格中的数据时,需要传递参数,依次所表达的参数,为页面码数的类,一个输入框中传递的Value值,部门名称的下拉框,职位名称的下拉框;
另外其他的部分,linq语句链表查询出所需要的数据,自定义封装好一个员工+部门+职位的类,链表之后,通过所连表的数据,把表格中的数据复制给类中的字段,
int intTotalRow = listEmpoty.Count(); intTotalRow: linq语句插叙的数据
List<EmployeeCount> empty = listEmpoty.Skip(layuiTablePage.GetStartIndex()).Take(layuiTablePage.limit).ToList();
//调用分页分装
LayuiTableData<EmployeeCount> listCont = new LayuiTableData<EmployeeCount>();
listCont.count = intTotalRow;//总行数;
listCont.data = empty;//具体显示的数据;
得到 return Json(listCont, JsonRequestBehavior.AllowGet);返回
(注意在使用时,虽然查询数据的代码步骤都是差不多,注意区分 方法 自定义的名称)
新增数据
多表的新增,本次练习小编偷了个懒,只是做了两个表的新增,点击表格外部的新增按钮,弹出一个layui模态框,只新增了员工表中的部分信息,和职位表中的职位,具体截图如下:
关于多表新增需要注意一下几点,
控制器中编辑方法时,传递参数的注意
(应该是说页面如何传递的参数来决定控制器参数的形式才对,做法因人而异,但思路差不多)
public ActionResult AddEmployee(PW_Employee pwEmployee , SYS_Position SYSPosition)
如上,传递参数为两个表格PW_Employee pwEmployee , SYS_Position SYSPosition,控制器方法中参数的传递也需要根据实现功能的需求来决定,本次案例,为是对两个表的信息进行修改,多表的编辑特别要注意传递附件表(职位表)的ID。
第一种:ajaxSubmit 方法
首先,主要着重的讲明使用插件来提交表单,使用该插件传递参数
在学习的MVC的过程中与一个封装了方法的插件,如下路径,一般在百度上是可以下载到该插件的
$("#formInsertExaminee").ajaxSubmit(function (returnJson) {
//关闭加载层
layer.close(layerIndex);
if (returnJson.State == true) {
//关闭模态框
$("#modInsertExaminee").modal("hide");
//刷新table
tabStudentSearch();
}
//提示
layer.alert(returnJson.Text, { icon: 0, title: '提示' });
});
使用该插件时,比较直接使用post,get等异步提交表单的差异在于提交方法的链接放在from标签中,提交方法也是
<form class="form-horizontal row" role="form" id="formInsertExaminee" action="/ExaminationManagement/SetExaminee/InsertStudent" method="post">
第二种,利用jquery.min.js 中serializeArray 方法获取指定from表单的内容传递
var formdata = $("#formNoticeType").serializeArray();
$.post(url, formdata, function (returnJson) {
if (returnJson.State == true) {
//$("#layerNoticeType").css('display','none')
layer.close(layerIndex);
//刷新表格
dbtabCount();
}
else {
layer.alert(returnJson.Text);
}
});
另外在编辑控制器中新增方法时需要主要新增表格信息的次序,新增部分的员工表信息,及其员工所处职位,第一步要确认数据库中是否有员工的信息和新增员工重复,判断 若不重复,首先把职位表的信息保存完毕,把保存那条的职位表的ID 赋值给员工信息表中的职位ID,之后在对所传递员工表的信息进行保存