开发工具与关键技术:Visual Studio 2015 LINQ
作者:孙水兵
撰写时间:2019年4月10
一、 新增前期工作:
在控制器最上端引入Models和装实体类的文件名称
实例化Models
在控制器的命名空间中实例化Models
Models.CQUPTEntities 自定义名称 = new Models.CQUPTEntities();
二、单表的新增
了解表格
单表新增在新增之前要先查看要新增的表格,知道自己要新增哪些数据,就比如我现在要新增的是学院表(SYS_Academe),要新增的数据为学院名称(AcademeName)和学院代号(AcademeCode)
HTML(显示部分代码)
HTML代码大概的效果是一个新增按钮,点击该按钮弹出一个模态框,该模态框中主要的字段为要新增表格中的字段。在form表格中用label标签包裹要新增的数据的名称,再用input标签包裹接收用户输入要新增的数据(input标签中的name要与数据库中表的列名(name)一致,方便控制器接收数据)
@*新增表单 模态框*@
<div class="modal fade" id="modalInsertAcademe" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
新增学院
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form id="formInsertAcademe" class="form-horizontal">
<div class="form-group form-row">
<label class="col-form-label col-3" for="IAcademeName">学院名称:</label>
<div class="col-9">
<input type="text" class="form-control" name="AcademeName" id="IAcademeName" />
</div>
</div>
<div class="form-group form-row">
<label class="col-form-label col-3" for="IAcademeCode">学院代号:</label>
<div class="col-9">
<input type="text" class="form-control" name="AcademeCode" id="IAcademeCode" />
</div>
</div>
<div class="form-group form-row justify-content-center">
<div class="col-auto">
<button type="button" class="btn btn-primary mr-2" "savaInsert()">保存</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
JS
新增的第一步当然是点击新增按钮弹出新增模态框,当然为了防止弹出新增模态框后模态框里面还存在上次新增后留下的数据,一般都会在弹出新增模态框之前将表单重置。
//打开新增model
function openInsert() {
//重置表单
$("#formInsertAcademe")[0].reset();
//打开模态框
$("#modalInsertAcademe").modal('show');
}
这个小方法是用来判断页面传过来的参数是否为空,或者为undefined。就是在方法里面传入一个参数,判断完参数是否为undefined、为空、为空字符串,然后返回。
//字符串不予许为空
function strValIsNotNull(strVal) {
return strVal != undefined && strVal != null && strVal != '';
}
写完方法名称之后的第一件事就是在模态框的保存按钮处写点击事件,然后在保存方法里第一件事就是获取表单里两个input标签的值,然后用上面提到的方法来判断获取到的值是否为为undefined、为空、为空字符串,所有判断的值都是并且的关系,有任何一个值为空都不行,如果有任何一个值为空,就应该提示用户,让用户填写完整。这里用到一个插件Layui,暂时不做说明。为了防止在网络不好的时候,用户提交信息慢时用户乱点其他按钮,这里用到一个Layui里面的加载层,用一个变量接收,然后在提交后马上关闭。在这用post提交,第一个参数为请求提交的路径一般为:/控制器名/方法名 或者/区域名/控制器名/方法名 或者直接写方法名(页面和方法名在同一个控制器可以这样写),然后就是接收上面获取到的表单的值,然后就是接下来要执行的方法,其中data使用开接收控制器返回过来的数据。然后在方法里关闭加载层。写到这里后可以去控制器写要执行的方法,然后再来写剩下的代码。判断控制器传过来的状态(State)是否为True,如果是,说明新增成功,然后关闭模态框,刷新表格。弹出提示框,输出控制器返回的提示。(由于layer是Layui插件中的,因此若没有使用Layui插件则将含有layer的提示都改为不含layer的提示)
//==保存新增
function savaInsert() {
//获取表单值
var AcademeName = $("#IAcademeName").val();
var AcademeCode = $("#IAcademeCode").val();
if (strValIsNotNull(AcademeName) && strValIsNotNull(AcademeCode)) {//判断值
layerIndex = layer.load();//打开加载层
$.post("/SystemManagement/CollegeInfor/InsertAcademe", {
AcademeName: AcademeName, AcademeCode: AcademeCode
}, function (data) {
layer.close(layerIndex);//关闭加载层
//判断是否成功
if (data.State) {//成功
$("#modalInsertAcademe").modal('hide'); //关闭模态框
tabAcademe.reload(); //刷新表格
}
layer.alert(data.Text);
}, "json")
} else { layer.alert('请填写完整', { icon: 0 }); }
}
创建一个实体类ReturnJsonVo,其中包含记录状态的State,记录文本Text,还有状态码、附加数据。其中get、set表示允许取出数据和新建数据。
public class ReturnJsonVo
{
/// <summary>
/// 状态
/// </summary>
public bool State { get; set; }
/// <summary>
/// 状态码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 文本
/// </summary>
public string Text { get; set; }
/// <summary>
/// 附加数据
/// </summary>
public object Object { get; set; }
}
控制器
新增的核心语句:
实例化Models的名称.要新增的表格名称.Add(接收要新增数据的变量)
示例:myModels.SYS_Academe.Add(sysAcademe);
根据页面post提交中的的方法名创建一个方法,用表对象来接收页面传过来的数据,注意,这个表为要新增的表,因为页面两个input标签的name该表对应的实体类中对应的字段一致。(另外还可以根据post提交的数据来接收页面的数据,为 : 前面的值,如根据上面post提交过来的数据,可以将SYS_Academe sysAcademe更改为 string AcademeName, string AcademeCode,其中AcademeName、AcademeCode要与页面post提交中: 前面的值的一致)。实例化一个ReturnJsonVo,将其命名为returnJson,用来返回状态和文本,然后将其中的State赋值为false,为避免每次返回都写一次(也可以不将其赋值为false,应为State为bool类型的值,而bool类型默认为false)。然后判断页面传过来的数据是否为空(!的含义为 非,表示不为)。如果为空,返回到页面的文本为:数据不完整。然后从数据库中要新增的表格(SYS_Academe)查询数据库中的数据是否与页面传过来的数据一致,其中任何一种数据一致都不行。并查询有多少条一致数据。如果查询出来的一致数据的条数不为0,返回文本:和以前的信息重复。反之,用Linq写新增(实例化Models的名称 . 要新增的表名称 . Add(接收页面传过来数据的参数);)。myModel.SaveChanges()为保存数据。所以判断,如果myModel.SaveChanges()>0,则表示新增成功,设置returnJson的状态为true,并返回文本:新增成功。反之返回文本:新增失败。最后,用Json格式将returnJson返回,并设置允许请求。
public ActionResult InsertAcademe(SYS_Academe sysAcademe)
{
ReturnJsonVo returnJson = new ReturnJsonVo();
returnJson.State = false;
//判断数据
if (!string.IsNullOrEmpty(sysAcademe.AcademeName)
&& !string.IsNullOrEmpty(sysAcademe.AcademeCode))
{
//检查与以前的是否冲突
int oldCount = (from tbAcademe in myModel.SYS_Academe
where tbAcademe.AcademeName == sysAcademe.AcademeName.Trim()
|| tbAcademe.AcademeCode == sysAcademe.AcademeCode.Trim()
select tbAcademe
).Count();
if (oldCount == 0)
{
//Linq 新增
myModel.SYS_Academe.Add(sysAcademe);
int intR = myModel.SaveChanges();
if (intR > 0)
{
returnJson.State = true;
returnJson.Text = "新增成功";
}
else
{
returnJson.Text = "新增失败";
}
}
else
{
returnJson.Text = "和以前的学院信息重复!";
}
}
else
{
returnJson.Text = "数据不完整";
}
return Json(returnJson, JsonRequestBehavior.AllowGet);
}