• 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层中处理缺陷代码
  • 相关阅读:
    vue中使用better-scroll实现滑动效果
    better-scroll一个好用的页面滑动工具
    display:table和display:table-cell结合使用
    大小图片
    axios的使用
    vue中两种路由跳转拼接参数
    Android 核心分析 之七Service深入分析
    Android 核心分析 之六 IPC框架分析 Binder,Service,Service manager
    Android 核心分析 之五基本空间划分
    Android核心分析之四手机的软件形态
  • 原文地址:https://www.cnblogs.com/JuneDream/p/14158018.html
Copyright © 2020-2023  润新知