Ajax的CRUD全套已测试

Jquery部分(需要引入到具体用得着这些脚本的界面)

jquery-1.7.1.js

jquery.easyui.min.js

easyui-lang-zh_CN.js

CSS部分

D:\VS2019\Asp.Net.WebApp2019\WebApp2019ASPX\CSS\themes\default\easyui.css

三层基本架构

UI(应用程序或网站)+BLL类库+DAL类库+Model类库+Common 类库

功能(一)用户列表

html部分 定义一个只含表头的空白表格 其它取自数据库的数据通过js拼接串.appendTo(tabId);来实现

取数据向服务端发送一个异步请求,返回Json格式的js格式的数组,回调函数得到该json到前端并转为Json对象

前端循环该Json对象拼接追加到空白表格体 其中详细/删除/编辑的超链接建类(标识单击事件)和id属性(取值)

为什么不直接用id选择器呢?因为Id选择器必须唯一,而每条的Id值是不一样的, 这样就没法用Id选择器给列表加单击事件了, 只能用类选择器给所有列表项加选择器的单击事件,且必须所有数据在表格上加载(循环)完了,才给详细单击事件加上,其它 删除/编辑也加到循环完了才加单击事件 而增加不是,是窗体加载完绑定增加单击事件.

全部Ajax+Jquery异步请求CRUD

需要的Jquery及CSS

https://files.cnblogs.com/files/noteTech/AjaxJquery%E9%9C%80%E8%A6%81%E7%9A%84CssJs.rar?t=1780479742&download=true

(1)UserInfoList.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <link href="../CSS/themes/default/easyui.css" rel="stylesheet" />
    <script src="../JS/jquery-1.7.1.js"></script>
    <script src="../JS/jquery.easyui.min.js"></script>
    <script src="../JS/easyui-lang-zh_CN.js"></script>
    <script type="text/javascript">
        $(function () {//页面加载做一件事儿
            $("#detailDiv").css("display", "none");//隐藏功能层
            $("#addUserDiv").css("display", "none");
            $("#editUserDiv").css("display", "none");
            loadUserInfo();//加载列表事件(方法代码见下)
            $("#addUserInfo").click(function () {//只有单击才发生 添加用户
                addUserFormShow();
            });
        });
        //展示 添加用户 表单
        function addUserFormShow() {
            $("#addUserDiv").css("display", "block");//展示添加div
            $('#addUserDiv').dialog({//展示放在此窗口,此内参数是Json格式
                title: "添加用户",
                width: 300,
                height: 200,
                modal: true,//模态窗口
                collapsible: true,//可折叠
                maximizable: true,
                resizable: true,//可拖调窗口大小

                buttons: [{
                    text: 'Ok',
                    iconCls: 'icon-ok',
                    handler: function () {
                        //alert('ok');
                        addUser()//点击窗口OK 执行方法()代码见下函数 方法要去后端ashx执行 插入操作 并异步返回结果(用data字符串标识)
                    }
                }, {
                    text: 'Cancel',
                    handler: function () {
                        $('#addUserDiv').dialog('close');//点击取消关闭增加窗口
                    }
                }]
            });
        }

        //完成用户添加用一般处理程序 一个异步Ajax Post请求
        function addUser() {
            var jsonObjDatas = $("#addUserForm").serializeArray();//用方法 得到对所有表单元素封装的Json对象 是对象 多键值 一定要记住这个方法 总用 不这样取数就是用Id一个个取了 当表单元素多时非常麻烦
            //alert(jsonDatas[0].name + "--->" + jsonDatas[0].value);//txtUserName--->aaa
            $.post("AddUserInfo.ashx", jsonObjDatas, function (data) {//传到后端ashx用post异步 参数为jsonObjDatas对象(封装了要插入的表单数据) 接收当然用request.form[]因为Post
                if (data == "ok") {// 清空表格 加载新表格 关闭表单窗口 清空表单元素输入值
                    $("#addUserForm input").val("");//清空表单 表单元素清空值用val 文本类如span用text
                    $('#addUserDiv').dialog('close');//关闭表单窗口所在层 即关掉表单窗口
                    $("#tbList tr:gt(0)").remove();//清旧列表 否则在原表基础上再插
                    loadUserInfo();//重新加载新列表
                }
                else {
                    $.messager("提示", "插入数据失败", "error");
                }
            });
        }

        //加载用户列表 方法
        function loadUserInfo() {//用$.post请求也可
            $.get("UserInfoListJson.ashx", {}, function (serverJsonStr) {//得到一个字符串类型Json格式的数组 一个元素是一条Json串
                //alert(serverDataJson);//是可以弹出 看得懂的Json格式的字符串
                //console.log(serverDataJson);//也可以用alert(serverDataJson)测试 这个是在检查功能的请求响应下看
                var jsonsObj = $.parseJSON(serverJsonStr);//由服务端的Json字符串转成Json对象供js使用
                //alert(jsonsObj);//由字符串转成的Json对象,看不懂了
                var datasLength = jsonsObj.length;
                for (var i = 0; i < datasLength; i++) {//长串后用\可回车断行, 好读好看 另在家总不出数据是因为<tr><td></td>中间有空格了
                    //建一行<tr>并追加到table中
                    $("<tr>\
                                                <td>" + jsonsObj[i].Id + "</td>\
                                                <td>" + jsonsObj[i].UserName + "</td>\
                                                <td>" + jsonsObj[i].UserPwd + "</td>\
                                                <td>" + changeDateFormat(jsonsObj[i].RegTime) + "</td>\
                                                <td><a href='javascript:void(0)' class='details' nid='"+ jsonsObj[i].Id + "'>详细</a></td>\
                                                <td><a href='javascript:void(0)' class='deletes' did='"+ jsonsObj[i].Id + "'>删除</a></td>\
                                                <td><a href='javascript:void(0)' class='edits' eid='"+ jsonsObj[i].Id + "'>编辑</a></td>\
                                            </tr>").appendTo("#tbList");//创建tr td 长字符串后用\ 回车多行是一行 由于JsonsObj来源于服务器端从数据库里查的集合,则其键名为字段名或类属性名 注意也增加和编辑里从表单里生成的JsonObj里用的是表单元素的Name名
                }
                bindDetailClick();//注意一定是把表格中的所有数据加载完成了 才能给表格中的超链接加单击事件
                bindDeleteClick();
                bindEditClickShowForm();//绑定单击编辑的事件
            });
        }

        //展示要修改的数据
        function bindEditClickShowForm() {
            $(".edits").click(function () {//类选择器 的单击事件
                var id = $(this).attr("eid");//通过属性eid 拿到列表某行Id
                $.post("ShowDetail.ashx", { "id": id }, function (data) {//Ajax异步post请求 用request接收 也可用get请求 Json格式的id发送到服务端 响应回来的是Json格式的UserInfo类的字符串
                    var serverData = $.parseJSON(data);//将返回的Json字符串data转为Json对象 必须转对象 才能被js用
                    $("#editIdId").val(serverData.Id);//将得到的Json对象的值填充到编辑表单元素的值 由于是编辑 id是隐藏域
                    $("#editUserNameId").val(serverData.UserName);//此及其它为文本框 且由于数据取自类属性或数据库 Json对象的键为字段名或UserInfo类属性名
                    $("#editUserPwdId").val(serverData.UserPwd);
                    $("#editRegTimeId").val(serverData.RegTime);//文本框写值用val(), 标签如span用text()
                });
                $("#editUserDiv").css("display", "block");//弹出显示
                $('#editUserDiv').dialog({//用easyUI展示弹出的显示 否则在原位置显示 难看不实用 不专业 依赖easyui.css样式
                    title: "用户详细信息",
                    width: 300,
                    height: 200,
                    modal: true,//模态 其在前 后列表点无效
                    collapsible: true,
                    maximizable: true,
                    resizable: true,

                    buttons: [{
                        text: 'Ok',
                        iconCls: 'icon-ok',
                        handler: function () {
                            //alert('ok');
                            editUserInfo();//点OK执行这个方法,方法代码见下函数
                        }
                    }, {
                        text: 'Cancel',
                        handler: function () {
                            $('#editUserDiv').dialog('close');//关闭编辑表单所在层
                        }
                    }]
                });

            });
        }
        //执行数据更新 点击上面显示的编辑表单的ok按钮时 执行如下函数代码
        function editUserInfo() {
            var jsonObj = $("#editUserForm").serializeArray();//通过js方法拿到编辑表单元素值封装的Json对象,注意我的描述,Josn对象与Json字符串不一回事儿,记住这个方法
            $.post("EditUserInfo.ashx", jsonObj, function (data) {//注意jsonObj来源于编辑表单,服务端取时用表单name属性接收
                if (data == "ok") {
                    $('#editUserDiv').dialog('close');//关闭编辑表单窗口 不用val()清除编辑表单元素值了,因为编辑前点某行编辑根据查找自动填充新值
                    $("#tbList tr:gt(0)").remove();//清列表旧数据
                    loadUserInfo();//重新加载列表新数据
                }
                else {
                    $.messager.alert("提示", "更新失败", "error");
                }
            });
        }

        //展示详细信息
        function bindDetailClick() {
            $(".details").click(function () {//类选择器 单击事件
                var id = $(this).attr("nid");
                //var id = $(this).data("nid");//更推荐的 .data("nid") 获取
                //var id = this.getAttribute("nid");//原生 JS 等价写法,非jQuery
                $.post("ShowDetail.ashx", { "id": id }, function (data) {//{ "id": id }这个参数就是Json对象 不是string,所以此处参数要求是Json对象
                    var serverData = $.parseJSON(data);//而从服务端传回来的data是Json格式的string,所以需要此转换成Json对象才能被js使用
                    $("#userName").text(serverData.UserName);//看没,span等就是text()方法赋值,表单文本框等表单元素用val()赋值
                    $("#userPwd").text(serverData.UserPwd);
                    $("#regTime").text(serverData.RegTime);
                });
                $("#detailDiv").css("display", "block");//显示详细
                //美化开始
                $('#detailDiv').dialog({//显示详细的美化 依赖easyui.css样式
                    title: "用户详细信息",
                    width: 300,
                    height: 200,
                    modal: true,
                    collapsible: true,
                    maximizable: true,
                    resizable: true,

                    buttons: [{
                        text: 'Ok',
                        iconCls: 'icon-ok',
                        handler: function () {
                            alert('ok');
                            //$('#detailDiv').dialog('close');
                        }
                    }, {
                        text: 'Cancel',
                        handler: function () {
                            $('#detailDiv').dialog('close');
                        }
                    }]
                });
                //美化结束
            });
        }

        //删除用户
        function bindDeleteClick() {
            $(".deletes").click(function () {//类选择器 的删除超链接 单击事件
                var id = $(this).attr("did");
                //删除提示 可直接用confirm
                $.messager.confirm("删除提示", "确定要删除么?", function (r) {
                    //alert(r);
                    if (r) {
                        $.post("DeleteUser.ashx", { "id": id }, function (data) {
                            //alert(data);
                            if (data == "ok") {//删除成功
                                $("#tbList tr:gt(0)").remove();//先清空表格数据行 否则在原来基础上又添加一遍删除后的 标签选择器 行 gt>0行的移除 0行为标题行
                                loadUserInfo();//在空白表格(只有标题行)再重新加载删除后的表格行
                                $.messager.show({
                                    title: '提示',
                                    msg: '删除成功',
                                    showType: 'show'
                                });//查帮助 show可用solid
                            }
                            else {
                                $.messager.alert("提示", "删除失败", "error");
                            }
                        });
                    }
                    else {
                        //alert(r);//false
                    }
                });
            });
        }

        //从毫秒数日期 转化为直接日期
        function changeDateFormat(cellval) {
            var date = new Date(parseInt(cellval.replace("/Date(", "").replace(")/", ""), 10));//替换 剩余纯数字(毫秒时间戳)转日期
            var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;//+1是因为得到的月是从0月开始
            var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();//我靠 getDate写成了getdate
            return date.getFullYear() + "-" + month + "-" + day;//这时day前面+缺失 都导致数据无法读出

            //var date = new Date(parseInt(cellval.replace("/Date(", "").replace(")/", ""), 10));
            //var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
            //var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
            //return date.getFullYear() + "-" + month + "-" + currentDate;
        }
    </script>
</head>
<body>
    <a href="javascript:void(0)" id="addUserInfo">添加用户</a><br />
    <!--列表 只列表头 开始-->
    <table id="tbList">
        <tr>
            <th>Id</th>
            <th>UserName</th>
            <th>UserPwd</th>
            <th>RegTime</th>
            <th>详细</th>
            <th>删除</th>
            <th>编辑</th>
        </tr>
    </table>
    <!--列表 结束-->
    <!------------详细信息 一个层------------------>
    <div id="detailDiv">
        <table>
            <tr>
                <td>用户名</td>
                <td><span id="userName"></span></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><span id="userPwd"></span></td>
            </tr>
            <tr>
                <td>注册时间</td>
                <td><span id="regTime"></span></td>
            </tr>
        </table>
    </div>
    <!------------详细信息结束------------------>
    <!---添加用户开始 一个层-->
    <div id="addUserDiv">
        <form id="addUserForm">
            <table>
                <tr>
                    <td>用户名</td>
                    <td><input type="text" name="txtUserName" id="txtName" /></td>
                </tr>
                <tr>
                    <td>密码</td>
                    <td><input type="text" name="txtUserPwd" /></td>
                </tr>
            </table>
        </form>
    </div>
    <!---添加用户结束-->
    <!---编辑用户开始 作为编辑条件的Id的隐藏域别忘了 一个层-->
    <div id="editUserDiv">
        <form id="editUserForm">
            <input type="hidden" name="txtEditId" id="editIdId" />
            <table>
                <tr>
                    <td>用户名</td>
                    <td><input type="text" name="txtEditUserName" id="editUserNameId" /></td>
                </tr>
                <tr>
                    <td>密码</td>
                    <td><input type="text" name="txtEditUserPwd" id="editUserPwdId" /></td>
                </tr>
            </table>
        </form>
    </div>
    <!---编辑用户结束-->
</body>
</html>
//UserInfoListJson.ashx得到全部列表数据 并序列化成Json格式的字符串,但由于多条数据,是一个Json格式的字符串JS(非C#)数组
using
BLL; using Model; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebApp2019ASPX._14AjaxUserInfoList { /// <summary> /// UserInfoListJson 的摘要说明 /// </summary> public class UserInfoListJson : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; UserInfoBLL bll = new UserInfoBLL(); List<UserInfo> list= bll.GetUserInfoList(); System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer(); string str= js.Serialize(list);//将List数据序列化成一个Json字符串,是一个javascript格式的数组,样式[..,..,..],每个元素是Json格式字符串 context.Response.Write(str);//返回给前端的jquery回调函数的data参数 } public bool IsReusable { get { return false; } } } }
//ShowDetail.ashx根据Id得到一个UserInfo对象的Json格式字符串 并返回 注意是Json字符串
using
BLL; using Model; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Script.Serialization; namespace WebApp2019ASPX._14AjaxUserInfoList { /// <summary> /// ShowDetail 的摘要说明 /// </summary> public class ShowDetail : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; int id = Convert.ToInt32(context.Request.Form["id"]);//前端js用异步post过来的, 如果get异步则用.queryString,当然最好都省,只保留request,让系统判断是post还是get UserInfoBLL bll = new UserInfoBLL(); UserInfo userInfo= bll.GetUserInfoBLL(id);//拿到对象 JavaScriptSerializer js = new JavaScriptSerializer(); string strJson= js.Serialize(userInfo);//转Json格式的string context.Response.Write(strJson);//响应给回调函数的data } public bool IsReusable { get { return false; } } } }
//EditUserInfo.ashx根据userInfo对象(含Id)执行更新用户信息 返回字符串标识值ok/no
using
BLL; using Model; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebApp2019ASPX._14AjaxUserInfoList { /// <summary> /// EditUserInfo 的摘要说明 /// </summary> public class EditUserInfo : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; UserInfo userInfo = new UserInfo(); userInfo.Id = Convert.ToInt32(context.Request["txtEditId"]);//前端是隐藏域hidden 由于是编辑 userInfo.UserName = context.Request["txtEditUserName"];//正常的text userInfo.UserPwd = context.Request["txtEditUserPwd"]; userInfo.RegTime = DateTime.Now; UserInfoBLL bll = new UserInfoBLL(); if (bll.EditUserInfoBLL(userInfo)) { context.Response.Write("ok"); } else { context.Response.Write("no"); } } public bool IsReusable { get { return false; } } } }
//DeleteUser.ashx根据Id删除用户信息 返回ok/no字符串
using
BLL; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebApp2019ASPX._14AjaxUserInfoList { /// <summary> /// DeleteUser 的摘要说明 /// </summary> public class DeleteUser : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; int id = Convert.ToInt32(context.Request["id"]); UserInfoBLL bll = new UserInfoBLL(); if (bll.DeleteUserInfoBLL(id)) { context.Response.Write("ok"); } else { context.Response.Write("no"); } } public bool IsReusable { get { return false; } } } }
//AddUserInfo.ashx添加用户信息 返回String标识值ok/no
using
BLL; using Model; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebApp2019ASPX._14AjaxUserInfoList { /// <summary> /// AddUserInfo 的摘要说明 /// </summary> public class AddUserInfo : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; UserInfo userInfo = new UserInfo(); //由于前端是把增加表单元素的值封装JsonObj传过来的,在用request接收时,用表单元素的name属性接收 userInfo.UserName = context.Request.Form["txtUserName"]; userInfo.UserPwd = context.Request["txtUserPwd"]; userInfo.RegTime = DateTime.Now; UserInfoBLL bll = new UserInfoBLL(); if (bll.AddUserInfoBLL(userInfo)) { context.Response.Write("ok"); } else { context.Response.Write("no"); } } public bool IsReusable { get { return false; } } } }

 Ajax分页

PageBarAjaxHelper.cs分页类在Common类库中

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Common
{
    public class PageBarAjaxHelper
    {
        public static string GetPageBar(int pageIndex, int pageCount)
        {
            if (pageCount == 1)
            {
                return string.Empty;
            }
            int start = pageIndex - 5;//数字页码条的起始数字
            if (start < 1)
            {
                start = 1;
            }
            int end = start + 9;
            if (end > pageCount)
            {
                end = pageCount;
                //最后不够10页 重新计算start值
                start = end - 9 < 1 ? 1 : end - 9;
            }
            StringBuilder sb = new StringBuilder();
            if (pageIndex > 1)
            {
                //sb.AppendFormat("<a href='UserInfoListPage.aspx?pageIndex={0}'>上一页</a>", pageIndex - 1);
                sb.AppendFormat("<a href='?pageIndex={0}' class='myPageBar'>上一页</a>", pageIndex - 1);
            }
            for (int i = start; i <= end; i++)
            {
                if (i == pageIndex)
                {
                    sb.Append(i);//当前URL页码=当前数字 不展示成超链接
                }
                else
                {
                    //sb.AppendFormat("<a href='UserInfoListPage.aspx?pageIndex={0}'>{0}</a>", i);
                    sb.AppendFormat("<a href='?pageIndex={0}' class='myPageBar'>{0}</a>", i);
                }
            }
            if (pageIndex<pageCount)
            {
                //sb.AppendFormat("<a href='UserInfoListPage.aspx?pageIndex={0}'>下一页</a>", pageIndex + 1);
                sb.AppendFormat("<a href='?pageIndex={0}' class='myPageBar'>下一页</a>", pageIndex + 1);
            }
            string str = sb.ToString();
            return sb.ToString();
        }
    }
}

 

UserInfoListPage.html列表页

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <link href="../CSS/pageBarStyle.css" rel="stylesheet" />
    <link href="../CSS/themes/default/easyui.css" rel="stylesheet" />
    <script src="../JS/jquery-1.7.1.js"></script>
    <script src="../JS/jquery.easyui.min.js"></script>
    <script src="../JS/easyui-lang-zh_CN.js"></script>
    <script type="text/javascript">
        //加载网页要干啥
        $(function () {//jq开头必写
            $("#divDetail").css("display", "none");//第一件事 隐藏 html的增改查三个div层 列表框架不在层中不隐藏
            $("#addUserDiv").css("display", "none");
            $("#editUserDiv").css("display", "none");
            loadUserInfoList(1);//为在此加载页面的方法时少写代码 定义一个方法(函数) 代码见下 测试分页的第一页写个1 分页***
            $("#addUserHref").click(function () {//添加用户超链接的单击事件
                showAddUserForm();//此方法(函数)代码如下
            });
        });

        //显示添加用户层及层内Form
        function showAddUserForm() {
            $("#addUserDiv").css("display", "block");//显示层
            $('#addUserDiv').dialog({//规划层的位置 通过easyUI.js 看没,下面都是关于dialog方法的参数,为json格式的参数 且json套json
                width: 300,
                height: 200,
                title: "添加用户",
                collapsible: true,
                maximizable: true,
                resizable: true,
                modal: true,//模态窗口 它在前 别的无法点 只能点它

                buttons: [{
                    text: 'Ok',
                    iconCls: 'icon-ok',
                    handler: function () {
                        addUser();//点击ok了 用方法一次性获取表单数据 Ajax异步执行添加操作 这里写一个方法 代码见后 逻辑清楚 更专业
                    }
                }, {
                    text: 'Cancel',
                    handler: function () {
                        $('#addUserDiv').dialog('close');
                    }
                }]
            });
        }
        //执行添加用户
        function addUser() {
            var jsonDatas = $("#addUserForm").serializeArray();//一次性拿到表单元素的数据并封装到可被JS识别的Json对象中 通过下面alert测试知道是封装到对象中了
            //alert(jsonDatas[0].name + "--->" + jsonDatas[0].value);//txtName=ccc
            //for (var key in jsonDatas) {
            //    alert(jsonDatas[key].name + "--->" + jsonDatas[key].value);}
            $.post("AddUser.ashx", jsonDatas, function (data) {//一个异步请求 服务端给回调函数参数data返回一个String类型的值
                if (data == "ok") {
                    $("#addUserForm input").val("");//清空表单元素值 关闭层显示 清除表格旧数据 加载新数据
                    $("#addUserDiv").dialog('close');//写了个closed
                    $("#tabList tr:gt(0)").remove();
                    loadUserInfoList();
                }
                else {
                    $.messager.alert("提示", "添加失败", "error");
                }
            });
        }

        //用户列表 加载
        function loadUserInfoList(pageIndex) {//学会alert调试js  分页***
            //alert(pageIndex);
            $.post("UserInfoListPage.ashx", { "pageIndex": pageIndex }, function (data) {//  分页***原无参post请求  向服务器发送异步post请求 无参,回调函数参数data接收服务器响应的string类型的Json数组
                //alert(data);//..........................调试,能看懂是个串 分页后2部分了 前部分key=pageList,后部分key=pageBar
                var jsonsObj = $.parseJSON(data);//  分页***和不分页代码没变,但回调的data承载的内容除列表Json串外还有页码条,ashx用了匿名类把列表及页码条加到了data中,使用时要区分,可监测data值指导使用  string的Json数组转JS认识的Json对象 分页后2部分了
                //alert(jsonsObjs);
                var jsonsObjLength = jsonsObj.pageList.length;//  分页***
                //alert(jsonsObjLength);
                for (var i = 0; i < jsonsObjLength; i++) {//由于Json数组对象来自服务端的List<UserInfo>,所以其键为UserInfo类属性名或数据库字段名
                    //alert(jsonsObj[i].UserName);//.........不同点位的调试 此次不出为<td>整成 <  td  >了 多空格了,其它早调试早解决了
                    $("<tr>\
                                        <td>" + jsonsObj.pageList[i].Id + "</td>\
                                        <td>" + jsonsObj.pageList[i].UserName + "</td>\
                                        <td>" + jsonsObj.pageList[i].UserPwd + "</td>\
                                        <td>" + jsonsObj.pageList[i].RegTime + "</td>\
                                        <td><a href='javascript:void(0)' class='details' nid='" + jsonsObj.pageList[i].Id + "'>详细</a></td>\
                                        <td><a href='javascript:void(0)' class='deletes' did='" + jsonsObj.pageList[i].Id + "'>删除</a></td>\
                                        <td><a href='javascript:void(0)' class='edits' eid='" + jsonsObj.pageList[i].Id + "'>编辑</a></td>\
                                    </tr>").appendTo("#tabList");//太长可串部分后接\+回车来断行 代码阅读性更强
                }
                $("#pageBarDiv").html(jsonsObj.pageBar);//  分页***  .text(jsonsObj.pageBar);//加页码条
                bindPageBarClick();//这就不要加单击页码再执行这个了 在下面方法开始定义单击干什么
                bindUserInfoDetailClick();//绑定用户详细信息事件(函数)
                bindUserInfoDeleteClick();
                bindUserInfoEditClick();
            });
        }

        //绑定分页单击事件
        function bindPageBarClick() {
            $(".myPageBar").click(function () {//<a href='?pageIndex={0}' class='myPageBar'>下一页</a>
                var pageIndex = $(this).attr('href').split('=')[1];//this为<a...标签 href为a标签的href属性?pageIndex={0},分割后拿到数组第2个值即{0}即页码
                alert(pageIndex);
                //拿到页码, 再用此pageIndex去调用LoadUserInfoList(pageIndex)方法就OK了
                $("#tabList tr:gt(0)").remove();
                loadUserInfoList(pageIndex);
                return false;//如果不用这个,当拿到a标签里的页码后浏览器还要渲染那个a标签,至URL有?pageIndex=3这样的情况,而加了return false就截止了后续的渲染
            });
        }

        //绑定用户详细信息事件(函数)
        function bindUserInfoDetailClick() {
            $(".details").click(function () {//类选择器 必须有, 否则直接出现了详情div层 只有点击了详细才显示层
                //alert("detail");
                var id = $(this).attr("nid");//nid引号别落
                //alert(id);
                $.post("UserInfoDetail.ashx", { "id": id }, function (data) {//data为服务端返回的Json格式的字符串(非js认识的json对象,js使用要转)
                    var serverData = $.parseJSON(data);//Json格式字符串转为Json对象
                    //alert(serverData);
                    $("#userName").text(serverData.UserName);//span非表单元素展示类Html标签 显示数据用text方法,通过id赋显示内容
                    $("#userPwd").text(serverData.UserPwd);
                    $("#regTime").text(serverData.RegTime);
                });
                $("#divDetail").css("display", "block");//显示
                $("#divDetail").dialog({//规划层显示的更专业用easyUI
                    title: "用户详细",
                    width: 300,
                    height: 200,
                    modal: true,//模态窗口
                    collapsible: true,
                    maximizable: true,
                    resizable: true,

                    buttons: [{//Json格式的参数
                        text: 'Ok',
                        iconCls: 'icon-ok',
                        handler: function () {
                            //alert('ok');
                            $('#divDetail').dialog('close');
                        }
                    }, {
                        text: 'Cancel',
                        handler: function () {
                            $('#divDetail').dialog('close');
                        }
                    }]
                });
            });
        }

        //绑定用户删除事件(函数)
        function bindUserInfoDeleteClick() {
            $(".deletes").click(function () {//类选择器 单击事件
                var id = $(this).attr("did");//取id还不能放到点击OK删除时再取,一点删除就得取 否则是undefined
                //alert(id);
                //提示删除  取id 发异步post请求用ashx删除 回调参数值 删除 删除表格内容并重载加载表格新内容
                $.messager.confirm("对话框标题", "正文提示删除", function (r) {//r=True或False
                    //alert(r);
                    if (r) {
                        //取id不能放在这里 必须点击删除就取 而不是点击确定删除了取 因为id是那个单击删除产生的事儿 点击此处确定删除与id无关了
                        $.post("DeleteUser.ashx", { "id": id }, function (data) {//异步Ajax post请求
                            if (data == "ok") {
                                $("#tabList tr:gt(0)").remove();//清表旧数据
                                loadUserInfoList();//加载新数据
                                $.messager.show({//右下角弹出提示 值此:$.messager.show/alert/dialog有此三种
                                    title: '提示',
                                    msg: '删除成功',
                                    timeout: 5000,
                                    showType: 'slide'//或show 学会看demo 引用demo里的js
                                });
                            }
                            else {
                                $.messager.alert("提示", "删除失败", "error");
                            }
                        });
                    }
                    else {
                        alert("不删了");
                    }
                });
            });
        }

        //编辑展示
        function bindUserInfoEditClick() {
            $(".edits").click(function myfunction() {//类选择器的单击事件
                var id = $(this).attr("eid");//自定义属性 拿Id
                $.post("UserInfoDetail.ashx", { "id": id }, function (data) {//Ajax异步post请求拿Json格式的string数据
                    var serverJsonObj = $.parseJSON(data);//string Json转Json对象
                    $("#txtIdId").val(serverJsonObj.Id);//给表单元素填值 注意非表单元素用.text,比如<span id='name'时 而表单元素input id=txtName 要用.val()
                    $("#txtUserNameId").val(serverJsonObj.UserName);
                    $("#txtUserPwdId").val(serverJsonObj.UserPwd);
                });
                $("#editUserDiv").css("display", "block");//
                $("#editUserDiv").dialog({ //easyUI显
                    title: "用户编辑",
                    width: 300,
                    height: 200,
                    modal: true,
                    collapsible: true,
                    maximizable: true,
                    resizable: true,

                    buttons: [{
                        text: 'Ok',
                        iconCls: 'icon-ok',
                        handler: function () {
                            //alert('ok');
                            editUser();
                        }
                    }, {
                        text: 'Cancel',
                        handler: function () {
                            $('#editUserDiv').dialog('close');
                        }
                    }]
                });
            });
        }
        //执行编辑
        function editUser() {
            var jsonDatas = $("#editUserForm").serializeArray();//一个方法把表单全部元素的值读取并封装到Json对象中(不用转了,串才转)
            $.post("EditUser.ashx", jsonDatas, function (data) {
                if (data == "ok") {
                    //$("#editUserForm input").val("");//不用清
                    $("#editUserDiv").dialog('close');//写了个closed
                    $("#tabList tr:gt(0)").remove();
                    loadUserInfoList();
                } else {
                    $.messager.alert("提法", "编辑失败", "error");
                }
            });
        }

    </script>
</head>
<body>
    <a href="#" id="addUserHref">添加用户-也可用javascript:void(0)代替#</a><hr />
    <!---列表-->
    <table id="tabList">
        <tr>
            <th>Id</th>
            <th>UserName</th>
            <th>UserPwd</th>
            <th>RegTime</th>
            <th>详细</th>
            <th>删除</th>
            <th>编辑</th>
        </tr>
    </table>
    <div id="pageBarDiv" class="page_nav"></div>
    <!---列表结束-->
    <!---用户详细层开始-->
    <div id="divDetail" style="font-size:16px;">
        <table>
            <tr>
                <td>用户名</td>
                <td><span id="userName"></span></td>
            <tr>
                <td>密码</td>
                <td><span id="userPwd"></span></td>
            </tr>
            <tr>
                <td>注册时间</td>
                <td><span id="regTime"></span></td>
            </tr>
        </table>
    </div>
    <!---用户详细层结束-->
    <!---添加用户表单开始,因为异步ajax实现,无需提交按钮,也无需普通button 其提交表单元素值是通过"添加用户"超链接的异步js事件--->
    <div id="addUserDiv" style="font-size:16px;">
        <form id="addUserForm">
            <table>
                <tr>
                    <td>用户名</td>
                    <td><input type="text" name="txtName" id="txtName" /></td>
                <tr>
                    <td>密码</td>
                    <td><input type="text" name="txtPwd" /></td>
                </tr>
            </table>
        </form>
    </div>
    <!---添加用户表单结束--->
    <!---编辑用户表单开始,别忘了编辑条件隐藏域Id 技术来源于详细与添加--->
    <div id="editUserDiv" style="font-size:16px;">
        <form id="editUserForm">
            <input type="hidden" name="txtId" id="txtIdId" />
            <table>
                <tr>
                    <td>用户名</td>
                    <td><input type="text" name="txtUserName" id="txtUserNameId" /></td>
                <tr>
                    <td>密码</td>
                    <td><input type="text" name="txtUserPwd" id="txtUserPwdId" /></td>
                </tr>
            </table>
        </form>
    </div>
    <!---编辑用户表单结束--->
</body>
</html>
<!--
{"pageList":
   [
    {"Id":1,"UserName":"11111","UserPwd":"11111","RegTime":"\/Date(1780411812193)\/"},
    {"Id":2,"UserName":"22222","UserPwd":"22222","RegTime":"\/Date(1780411826367)\/"},
    {"Id":6,"UserName":"aaaaa","UserPwd":"aaaaa","RegTime":"\/Date(1780411844737)\/"},
    {"Id":7,"UserName":"bbbbb","UserPwd":"bb","RegTime":"\/Date(1778597585350)\/"},
    {"Id":9,"UserName":"555","UserPwd":"5","RegTime":"\/Date(1778319891173)\/"}
   ]
    ,
 "pageBar":
    "1\u003ca href=\u0027UserInfoListPage.aspx?pageIndex=2\u0027\u003e2\u003c/a\u003e\u003ca href=\u0027UserInfoListPage.aspx?pageIndex=3\u0027\u003e3\u003c/a\u003e\u003ca href=\u0027UserInfoListPage.aspx?pageIndex=4\u0027\u003e4\u003c/a\u003e\u003ca href=\u0027UserInfoListPage.aspx?pageIndex=2\u0027\u003e下一页\u003c/a\u003e"
}

    {"pageList":[{"Id":1,"UserName":"11111","UserPwd":"11111","RegTime":"\/Date(1780411812193)\/"},{"Id":2,"UserName":"22222","UserPwd":"22222","RegTime":"\/Date(1780411826367)\/"},{"Id":6,"UserName":"aaaaa","UserPwd":"aaaaa","RegTime":"\/Date(1780411844737)\/"},{"Id":7,"UserName":"bbbbb","UserPwd":"bb","RegTime":"\/Date(1778597585350)\/"},{"Id":9,"UserName":"555","UserPwd":"5","RegTime":"\/Date(1778319891173)\/"}],"pageBar":"1\u003ca href=\u0027?pageIndex=2\u0027\u003e2\u003c/a\u003e\u003ca href=\u0027?pageIndex=3\u0027\u003e3\u003c/a\u003e\u003ca href=\u0027?pageIndex=4\u0027\u003e4\u003c/a\u003e\u003ca href=\u0027?pageIndex=2\u0027\u003e下一页\u003c/a\u003e"}
-->

 

UserInfoListPage.ashx被html列表页异步调用响应返回某页JsonListStr的一般处理程序

 

using BLL;
using Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApp2019ASPX._17AjaxCRUD
{
    /// <summary>
    /// UserInfoListPage 的摘要说明
    /// </summary>
    public class UserInfoListPage : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {            
            context.Response.ContentType = "text/plain";
            int pageIndex;//无论如何 都有在获取某页的List<UserInfo>有pageIndex 写上再说  分页用**
            if (!int.TryParse(context.Request["pageIndex"], out pageIndex))//分页用**
            {
                pageIndex = 1;//得不到页码 默认赋1**
            }
            int pageSize = 5;//规定每页5条 分页用**
            UserInfoBLL bll = new UserInfoBLL();
            int pageCount = bll.GetPageCount(pageSize);//分页用**
            pageIndex = pageIndex < 1 ? 1 : pageIndex;
            pageIndex = pageIndex > pageCount ? pageCount : pageIndex;

            List<UserInfo> list = bll.GetUserInfoListPage(pageIndex, pageSize);// bll.GetUserInfoList();
            string pageBarStr = Common.PageBarAjaxHelper.GetPageBar(pageIndex, pageCount);

            System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();//js序列化类
            string jsonStr = js.Serialize(new { pageList = list, pageBar = pageBarStr });//用匿名类把页码条和list加到一起代替-->(list);//将list集合序列化成  Json字符串 一个js数组 形如:[**:**,**:**,...]多个键值形式,
            context.Response.Write(jsonStr);//响应回给前端js的回调函数的参数data 注意是Json字符串 而非Json对象
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

 

posted @ 2026-06-03 06:46  techNote  阅读(5)  评论(0)    收藏  举报