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");
            }
HttpHander中处理缺陷
    /// <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;
        }    
DAL层中处理缺陷代码
原文地址:https://www.cnblogs.com/JuneDream/p/14158018.html