开发工具与关键技术:Visual Studio 2015 LINQ
作者:孙水兵
撰写时间:2019年4月23
一、 删除前期工作:
在控制器最上端引入Models和装实体类的文件名称
实例化Models
在控制器的命名空间中实例化Models
Models.CQUPTEntities 自定义名称 = new Models.CQUPTEntities();
二、 单表的删除
了解表格
在删除之前要先查看要删除的表格,知道哪些表格和自己要删除表格有联系,就比如我现在要删除的是知识点表(SYS_Point)。就现在以知识点表来说,知识点表是父表,而题目表是子表,所以,要删除父表,先判断子表中是否含有要删除的父表的ID。若没有,可以删除,若有,不可以删除。
三、 目的:选中单条数据,点击删除按钮,然后删除。
四、 代码分析
HTML
这的代码很简单,只需设置一个删除按钮就行。在写了除后记得返回写点击事件。
JS部分
写一个删除的方法deletePoint,写完后要记得去删除按钮那写点击事件。由于我这用的是Layui插件,获取选中行的数据还有设置删除按钮都是用的Layui插件。(若不用插件,在HTML中设置按钮,然后再删除方法中获取数据,然后再继续往下写弹出询问提示框(由于layer也是Layui插件中的,因此将含有layer的提示都改为不含layer的提示))。使用插件从表格众获取选中行的数据,取出数据中要删除数据的表格的主键ID(PointID)。将该主键ID作为参数传入方法中。用Layui插件设置一个询问提示框,询问用户是否要删除该条数据,然后在询问后要执行的方法中写一个参数(layIndex),用来记录询问提示框的,点击确定关闭询问提示框(layer.close(layIndex);)。继续往下执行,用post提交传入要删除数据的表格的主键ID(PointID)。用data接收控制器返回的数据,判断控制器返回数据中的state(状态)是否为true。若为true,刷新表格,输出state为true时返回的文本,反之,输出state为false时返回的文本。
//删除
function deleteSubject(SubjectId) {
layer.confirm('你确定要删除该用户类型?', { icon: 3, title: '提示' }, function (index) {
layer.close(index);
//打开加载层
layIndex = layer.load();
$.post("DeleteSubject", { SubjectId: SubjectId }, function (data) {
layer.close(layIndex);//关闭加载层
if (data.State) {
//属性表格
tabSubject.reload();
layer.alert(data.Text, { icon: 1, title: '提示' })
} else {
layer.alert(data.Text, { icon: 2, title: '提示' })
}
}, 'json');
});
}
控制器代码
删除的核心语句:
实例化Models的名称.要删除的表格名称.Remove(查询出要删除数据(单条数据))
示例:myModels.SYS_Point.Remove(varPoint);
创建保存删除的方法DeletePoint,接收视图传过来的数据PointID(要删除数据的表格的主键ID)。实例化一个ReturnJsonVo(详情可见linq新增之单表表新增),将其命名为returnJson,用来返回状态和文本。由于ReturnJsonVo中的state为bool,而bool类型默认为false,所以returnJson中的state默认为false。由于等会查询要删除的数据时用到单条数据的查询(Single),所以捕获异常,出现异常,输出文本。根据视图传过来的数据PointID在题目表中查找是否有对应的知识点ID(PointID)。如果有,说明该知识点下存在题目,不能删除,否则会导致试题中的被删除知识点下的题目为垃圾数据。如果没有(查出来的titleCount==0),根据视图传过来的数据PointID查询出该知识点并用varPoint接收。然后移除该条数据(myModels.SYS_Point.Remove(varPoint);)。myModel.SaveChanges()为保存数据。所以判断,如果myModel.SaveChanges()>0,则表示删除成功,设置returnJson的状态为true,并返回文本:删除成功。反之返回文本:删除失败。最后,用Json格式将returnJson返回,并设置允许请求。
public ActionResult DeletePoint(int PointID)
{
ReturnJsonVo returnJson = new ReturnJsonVo();
try
{
var titleCount = (from tbTitle in myModels.PW_Title
where tbTitle.PointID == PointID
select tbTitle).Count();
if (titleCount == 0)
{
var varPoint = (from tbPoint in myModels.SYS_Point
where tbPoint.PointID == PointID
select tbPoint).Single();
myModels.SYS_Point.Remove(varPoint);
if (myModels.SaveChanges() > 0)
{
returnJson.State = true;
returnJson.Text = "删除成功!";
}
else
{
returnJson.Text = "删除失败!";
}
}
else
{
returnJson.Text = "该知识点下存在题目,不能删除!";
}
}
catch (Exception e)
{
Console.Write(e);
returnJson.Text = "参数异常!";
}
return Json(returnJson, JsonRequestBehavior.AllowGet);
}