Asp.NET笔记(七)--使用HttpHandler+Ajax实现数据删除、添加、修改
Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。
一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩展名。一个httpHandler接受并处理一个http请求。httpHandler在net中需要实现IHttpHandler接口,这个接口有一个IsReusable成员,一个待实现的方法ProcessRequest(HttpContextctx) 。程序在processRequest方法中处理接受到的Http请求。成员IsReusable指定此IhttpHandler的实例是否可以被用来处理多个请求。
.ashx程序适合产生供浏览器处理的、不需要回发处理的数据格式
使用HttpHandler+Ajax操作数据流程就是使用Ajax发送请求给HttpHandler,HttpHandler处理结果后将结果再返回给Ajax
具体操作案例:
一、引入JQuery文件包
<script src="Scripts/jquery-3.4.1.min.js"></script>
二、在页面的js函数中写Ajax请求
//删除的js方法 function Del(id) { if (confirm("你确定要删除吗?") == true) { $.ajax({ url: "/Handler1.ashx",//处理ajax请求的地址,要以/开头 type: "get",//请求方式 默认get dataType: "json",//请求发送的数据类型 data: { ID: id },//发送请求时的参数值 success: function (data) {//data指一般处理程序给页面的返回值 if (data == "1") { alert('删除成功!'); location.href = "WebForm1.aspx"; //重新加载页面实现刷新 } else { alert('删除失败!'); } } }) } }
三、在页面中给按钮或超链接添加点击事件调用js方法
<a href="#" onclick='Del( <%# Eval("Id") %> )'>删除 </a>
注意:这里调用函数时需要给方法赋实参,可以用数据绑定技术把参数传递
四、在一般处理程序中处理ajax的请求,并返回结果
public void ProcessRequest(HttpContext context) { //指定HttpHandler响应HTTP的格式为文本 context.Response.ContentType = "text/plain"; //实例化bll对象 FurnitureBLL bLL = new FurnitureBLL(); //获取ajax get方式传递过来的id值 int id = int.Parse(context.Request.QueryString["ID"]); //bLL.DeleteDefect(id)执行删除操作 if (bLL.DeleteFurniture(id)) //如果执行成功 { context.Response.Write("1"); //HttpHandler向前端浏览器返回结果1 } else//否则执行失败 { context.Response.Write("0");//HttpHandler向前端浏览器返回结果0 } }
---------------------------------------------------------------
DAL层方法的代码:
/// <summary> /// 删除 /// </summary> /// <param name="id">要删除实体的id</param> /// <returns>返回是否删除成功</returns> public bool DeleteFurniture(int id) { //通过id查询结果 var result = from i in db.Furniture where i.Id == id select i; //获取结果中第一个或默认的那个对象 Furniture furniture = result.FirstOrDefault(); //删除该对象 db.Furniture.DeleteOnSubmit(furniture); db.SubmitChanges();//将改动提交给数据库 return true; //返回成功
-----------------------------------------------------------------------------------------
Ajax实现添加和修改的写法同删除的一样,只是ajax中data中的参数不同,添加需要给后台提供的参数是要添加或要修改的内容
添加:
//添加评论的方法 function AddComment() { //获取用户姓名 获取元素的值语法:$("选择器").val() //var UserName = document.getElementById("txtUserName").textContent; var userName = $("#txtUserName").val(); //获取内容 var content = $("#txtContent").val(); //用ajax实现异步请求 $.ajax({ url: "/Handler1.ashx",//处理ajax请求的地址,注意地址前面以“/”开头 type: "get",//请求方法是get还是post dataType: "json",//请求参数的数据类型 data: { UserName: userName, Content: content }, //请求提供的参数值 //成功后的处理 success: function (data) {//data指请求后程序给页面的返回值 if (data == "1") { alert("添加成功!"); //在div中追加一条评论信息,实现异步刷新 $("#LiuYan").append("<h4>" + userName + "</h4>" + "<p>" + content + "</p>"); } else { alert("添加失败!"); } } }); }
添加的具体处理代码,请参阅笔记四
-----------------------------------------------------
通过id修改实体已知字段的值
如:处理缺陷
function Editdefect(id) { $.ajax({ url: "/Handler1.ashx",//处理ajax请求的地址,要以/开头 type: "get",//请求方式 默认get dataType: "json",//请求发送的数据类型 data: { ID: id },//发送请求时的参数值 success: function (data) {//程序给页面的返回值 if (data == "1") { alert('处理成功!'); location.href = "WebForm1.aspx"; } else { alert('处理失败!'); } } }) }
//实例化bll对象 DefectBLL bLL = new DefectBLL(); //获取参数缺陷id值 int id = int.Parse(context.Request.QueryString["ID"]); //执行修改操作 if (bLL.ChuliDefect(id)) { context.Response.Write("1"); } else { context.Response.Write("0"); }
/// <summary> /// 处理缺陷 /// </summary> /// <param name="id">缺陷id</param> /// <returns>是否处理成功</returns> public bool ChuliDefect(int id) { //通过id找到缺陷信息 Defect defect = (from i in db.Defect where i.DefectID == id select i).FirstOrDefault(); //修改缺陷信息 defect.DefectState = 2;//2为已处理 defect.DealTime = DateTime.Now; //处理事件为当前时间 //将保持提交给数据库 db.SubmitChanges(); return true; }