MVC框架之多表循环新增
多表新增也就是一次新增多张表或新增多张表的多张数据,下面是我在MVC中做的一个多表新增的实例,MVC是主要分为三层架构的,M为Models数据层,连接实体数据模型;V为视图层,用于显示数据;C层为控制层,用于处理数据返回页面。多表新增是通过先新增主表,然后返回主表ID,接着获取刚新增的主表ID继续赋给明细表新增,下面是我做一个通过HTML中的JavaScript循环新增实例,跟实际项目毫无关系,仅供参考:
1、 首先我们先HTML中创建好页面:定义好控件,代码如下图:
其中我有引用布局插件,因为懒得写样式了,表格用来输入多条明细,循环提交;
2、紧接着就是写后台代码了,后台需要写两个新增方法,新增主表和明细表,代码如下,
public ActionResult SaveProject(string ProjectName)
{
string strmsg = "";
int returnProjectid = 0;
try
{
if (ProjectName.Trim() != "")
{
Models.tbProject mytbProject = new tbProject();
mytbProject.ProjectName = ProjectName.Trim();
myModels.tbProject.Add(mytbProject);
if (myModels.SaveChanges() > 0)
{
returnProjectid = mytbProject.ProjectID;
}
}
}
catch (Exception)
{
throw;
}
return Json(returnProjectid, JsonRequestBehavior.AllowGet);
}
/// <summary>
///新增项目明细
/// </summary>
/// <param name="ProjectID"></param>
/// <param name="ProjectDetailName"></param>
/// <returns></returns>
public ActionResult InsertProjectDetail(int ProjectID,string ProjectDetailName)
{
string strmsg = "新增失败";
try
{
if (ProjectID > 0 && ProjectDetailName != "")
{
Models.tbProjectDetail mytbProjectDetail = new tbProjectDetail();
mytbProjectDetail.ProjectID = ProjectID;
mytbProjectDetail.ProjectDetail = ProjectDetailName;
myModels.tbProjectDetail.Add(mytbProjectDetail);
if (myModels.SaveChanges() > 0)
{
strmsg = "新增成功";
}
else
{
strmsg = "新增失败";
}
}
}
catch (Exception)
{
throw;
}
return Json(strmsg, JsonRequestBehavior.AllowGet);
}
3、最后我们就要回我们的页面补上JavaScript的提交数据代码了,代码如图所示:
其中主要保存代码解释如下:
//保存
function SaveProject() {
//获取主表的值
var ProjectName = $("#ProjectName").val();
//获取明细表TR
var TR = $("#tbProjectDetail tr");
if (ProjectName.toString().trim() != "") {
//主表的值不为空就新增,通过post提交到后台方法
$.post("SaveProject", { "ProjectName": ProjectName }, function (intProjectid) {
if (intProjectid > 0) {//因为后台返回的是新增的ID,如果有返回就继续新增明细信息
if (TR.length > 0) {//判断明细表有无数据(tr)
for (var i = 1; i < TR.length; i++) {//循环遍历表格新增明细
var td = $(TR[i]).children();//获取循环遍历的td
//获取表格中td内容
var strProjectDetailName = td.eq(1).children().val(); if (strProjectDetailName != "") {//表格内容不为空就新增
//获取刚刚返回的主表ID和输入的明细信息进行提交保存
$.post("InsertProjectDetail", { ProjectID: intProjectid, ProjectDetailName: strProjectDetailName }, function (msg) {
if (msg != "") {
strmsg = msg;//获取控制器返回的字符串,给到全局变量
}
});
}
}
if (strmsg != "") {//结束时如果不为空就输出返回的结果
alert(strmsg);
}
}
}
});
}
}
这就是MVC中通过JavaScript新增多条数据的方法了,当然有更好的方法可以直接在后台新增方法里循环新增;其实思路都一样,如果两张表有联系,那么就需要新增完主表返回主表ID给明细表继续新增。