asp ajax 前台和后台结合

5 篇文章 0 订阅
#abtitle {
    height: 30px;
    background-color: #0094ff;
    color: white;
    font-size: 18px;
    line-height: 30px;
    padding-left: 15px;
}

#ablist {
    border: dashed 1px #000;
    min-height: 500px;
    overflow: auto;
    height: 500px;
}

    #ablist .abldiv {
        height: 170px;
        width: 165px;
        display: inline-block;
        margin-left: 3px;
        border: solid 1px #000;
    }

        #ablist .abldiv li {
            text-align: center;
            margin-top: 5px;
            padding: 3px;
        }

.abldiv img {
    cursor: pointer;
}


#edit {
    display: none;
    position: absolute;
    top: 200px;
    left: 300px;
}

    #edit td {
        background-color:#ddc2c2;
    }

<%@ Page Title="" Language="C#" MasterPageFile="~/Masterpage/Site1.Master" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="Blog.Site.Alb.index" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <link href="/css/alb.css" rel="stylesheet" />
    <script src="/js/common.js"></script>
    <script src="/js/jquery-1.9.1.js"></script>
    <script src="/js/jquery.tmpl.min.js"></script>
    <script src="/js/msgBox.js"></script>
    <script type="text/javascript">

        var isEdit = false;
        var msgbox;


        $(function () {

            //实例化msgbox控件(漂亮提示框)的实例
            msgbox = new MsgBox({ imghref: "/img/" });

            //调用获取列表方法
            getlist();

            //负责从表Enumeration 获取状态数据
            getStatusList();
        });

        //1.0 负责从表Enumeration 获取状态数据
        function getStatusList() {
            ajaxHelper.ajaxGet("/actions/albopt.ashx?type=getstatuslist", function (jsobj) {
                //将数据填充到select 标签中
                var arr = jsobj.datas;
                var selobj = document.getElementById("status");
                for (var i = 0; i < arr.length; i++) {
                    var item = arr[i];
                    var opt = new Option(item.e_cname, item.e_id);
                    selobj.options.add(opt);
                }
            });
        }

        //2.0 负责获取相册的列表
        function getlist() {
            // 利用ajax请求后台一般处理程序,得到相册的json格式数据,开始利用模板生成页面
            ajaxHelper.ajaxGet("/actions/albopt.ashx?type=getalllist", function (jsobj) {
                //此时jsobj一定是一个js的对象,其中jsobj.datas 才是正常要取得的逻辑数据,它有可能是一个js对象或者数组
                if (jsobj.status == "error") {
                    alert(jsobj.msg);
                } else if (jsobj.status == "sucess") {
                    //正常处理逻辑。利用jquery.tmpl.min.js中的tmpl方法 将jsobj.datas中的数据一一替换到id为ablTmpl的模板中的${}等占位符
                    //最终返回生成好的html代码追加到id=ablist的div中
                    $("#ablist").html($("#ablTmpl").tmpl(jsobj.datas));
                }
            });
        }

        //2.0.1 负责根据图片名称返回图片的完整虚拟路径,如果图片为null.jpg则直接显示默认图片,此方法会被模板
        //jquery.tmpl.min 来调用
        function getimgpath(imgname) {
            if (imgname == "null.jpg") {
                return "/images/null.jpg"
            } else {
                return "/upload/thum/" + imgname;
            }
        }

        //3.0 负责将老数据加载到面板中,并且弹出编辑面板
        function editload(paid) {
            isEdit = true;
            // 1.0 ajax 请求paid对应的数据
            ajaxHelper.ajaxGet("/actions/albopt.ashx?type=getmodelbyid&id=" + paid, function (jsobj) {
                var entity = jsobj.datas;
                $("#id").val(entity.PaId);
                $("#title").val(entity.PaTitle);
                $("#remark").val(entity.PaRemark);
                $("#status > option[value='" + entity.PaStatu + "']").attr("selected", "selected");
            });
            //2.0 打开面板
            openPanel(true);
        }

        //3.0.1 负责打开(isopen=true)或者关闭(isopen=false)新增编辑面板  
        function openPanel(isopen) {
            if (isopen) {
                $("#edit").show(); //打开面板
            } else {
                $("#edit").hide();//关闭面板
            }
        }

        //4.0 负责提交数据到服务器页面,进行新增或者编辑操作
        function submitData() {
            if (isEdit) {
                //做编辑逻辑
                edit();
            }
            else {
                //新增逻辑
                add();
            }
        }

        //4.0.1 编辑操作
        function edit() {
            //1.0 获取当前编辑面板中所有的值
            //遍历id=f1的form表单中带有name属性的元素,将其序列化成参数格式的字符串。例如://title=a&remark=b&status=4
            var pamrs = $("#f1").serialize();
            pamrs += "&type=edit";

            //2.0 利用ajax的post请求将参数提交给服务器页面
            ajaxHelper.ajaxPost("/actions/albopt.ashx", pamrs, function (jsobj) {
                msgbox.showMsgOk(jsobj.msg, function () {
                    //刷新自己
                    window.location = window.location;
                    //window.location.reload();
                });
            });
        }

        //负责将isedit赋值为false,并且打开面板,同时将文本框中的内容清空
        function addOpt() {
            isEdit = false;
            $("#id").val("");
            $("#title").val("");
            $("#remark").val("");
            $("#status > option").removeAttr("selected");

            openPanel(true);
        }

        //4.0.2 新增功能
        function add() {
            var pamrs = $("#f1").serialize();
            pamrs += "&type=add";

            ajaxHelper.ajaxPost("/actions/albopt.ashx", pamrs, function (jsobj) {
                msgbox.showMsgOk(jsobj.msg, function () {
                    window.location = window.location;
                });
            });
        }

        //负责删除相册
        function del(paid,t) {
            if (confirm("你是否删除数据")) {
                ajaxHelper.ajaxGet("/actions/albopt.ashx?type=del&id=" + paid, function (jsobj) {
                    msgbox.showMsgOk(jsobj.msg, function () {
                        //找到当前删除按钮所在的div,将其remove掉
                        //$(t).parent().parent().parent().remove();

                        getlist();
                    });
                });
            }
        }


    </script>
    <script id="ablTmpl" type="text/x-jquery-tmpl">
        <div class="abldiv">
            <ul>
                <li>
                    <img src="${getimgpath(PaCoverSrc)}" height="100px" width="120px" /></li>
                <li>${PaTitle}</li>
                <li><a href="javascript:void(0);" onclick="editload(${PaId})">编辑</a>
                    | <a href="javascript:void(0);" onclick="del(${PaId},this)">删除</a></li>
            </ul>
        </div>
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <div id="abtitle">
        相册管理
        <input type="button" value="新增相册" onclick="addOpt()" />
    </div>
    <div id="ablist">
    </div>
    <%--新增和编辑的面板--%>
    <div id="edit">
        <form id="f1">
            <input type="hidden" id="id" name="id" />
            <table class="list">
                <tr>
                    <th>相册名称</th>
                    <td>
                        <input id="title" name="title" type="text" />
                    </td>
                </tr>
                <tr>
                    <th>备注</th>
                    <td>
                        <textarea id="remark" name="remark"></textarea>
                    </td>
                </tr>
                <tr>
                    <th>状态</th>
                    <td>
                        <select id="status" name="status"></select>
                    </td>
                </tr>
                <tr>
                    <th></th>
                    <td>
                        <input type="button" value="提交" onclick="submitData()" />
                        <input type="button" value="关闭" onclick="openPanel(false)" />
                    </td>
                </tr>
            </table>
        </form>
    </div>
</asp:Content>

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

namespace Blog.Site.actions
{
    using Blog.BLL;
    using Blog.Common;
    using Blog.Model;

    /// <summary>
    /// 负责处理相册表的增,删,查,改逻辑
    /// </summary>
    public class albopt : BaseAshx
    {
        BlogPhotoAlblumBLL bll = new BlogPhotoAlblumBLL();
        EnumerationBLL ebll = new EnumerationBLL();
        #region 1.0 所有请求的入口
        public override void SubProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            try
            {

                //1.0 约定type为当前请求的类型(增,删,查,改),此参数是由ajax请求传入
                string type = context.Request.Params["type"];
                switch (type)
                {
                    case "getalllist":
                        getalllist();
                        break;
                    case "getmodelbyid":
                        getmodelbyid();
                        break;
                    case "add":
                        add();
                        break;
                    case "edit":
                        edit();
                        break;
                    case "del":
                        del();
                        break;
                    case "getstatuslist":
                        getStatusList();
                        break;
                    default:
                        break;
                }
            }
            catch (Exception ex)
            {
                //Response.Write();
                //Response.Write(ex.Message); //未将对象引用到实例  {status:error,msg:未将对象引用到实例,datas:null}
                base.WriteError(ex.Message);
            }
        }

        #endregion

        #region 2.0 获取列表逻辑代码

        private void getalllist()
        {
            //1.0 获取相册列表数据集合
            List<BlogPhotoAlblum> list = bll.GetModelList(" PaIsDel = 0 ");

            //2.0 实例化ajaxobj的对象实例            
            obj.status = EStatus.sucess.ToString();
            obj.msg = "获取数据成功";
            obj.datas = list;

            base.Response.Write(Kits.ToJsonString(obj));//{status:ok,msg:获取数据成功,datas:[{},{}]}
        }
        #endregion

        #region 3.0 编辑操作
        private void edit()
        {
            //1.0 接收异步对象通过post操作提交过来的参数
            string id = Request.Form["id"];
            string title = Request.Form["title"];
            string remark = Request.Form["remark"];
            string status = Request.Form["status"];

            //2.0 参数合法性验证
            if (Kits.IsInt(id) == false || Kits.IsInt(status) == false)
            {
                base.WriteError("id和状态必须为整数");
                return;
                //由于End()会产生一个子线程异常,所以推荐使用return;
                //Response.End();
            }
            if (string.IsNullOrEmpty(title) || string.IsNullOrEmpty(remark))
            {
                base.WriteError("标题和备注不能为空");
                return;
            }

            //3.0 开始将数据更新到db
            BlogPhotoAlblum entity = bll.GetModel(int.Parse(id));
            entity.PaTitle = title;
            entity.PaRemark = remark;
            entity.PaStatu = int.Parse(status);
            bll.Update(entity);

            //4.0 提示用户更新成功
            base.WriteSucess("数据更新成功", null);
        }

        private void getmodelbyid()
        {
            //1.0 获取id参数的值
            string id = Request.QueryString["id"];

            // 2.0 验证参数的合法性
            if (Kits.IsInt(id) == false)
            {
                //{status:error,msg:参数id不合法,datas:null}
                base.WriteError("参数id不合法");
                return;
            }

            // 3.0 根据id去db中获取数据实体
            BlogPhotoAlblum entity = bll.GetModel(int.Parse(id));

            //4.0 调用父类统一的输出方法,将json数据响应回异步对象
            base.WriteSucess("", entity);
        }

        /// <summary>
        /// 负责从表[Enumeration] 中获取e_type=3的数据集合
        /// 以json字符串响应会异步对象
        /// </summary>
        private void getStatusList()
        {
            // 1.0 从数据库查询出数据集合
            List<Enumeration> list = ebll.GetModelList(" e_type = 3 ");
            obj.status = EStatus.sucess.ToString();
            obj.msg = "";
            obj.datas = list;

            // 2.0 将list集合序列化成json字符串以后,响应回异步对象
            base.Response.Write(Kits.ToJsonString(obj));
        }

        #endregion

        #region 4.0 新增
        private void add()
        {
            //1.0 接收异步对象通过post操作提交过来的参数

            string title = Request.Form["title"];
            string remark = Request.Form["remark"];
            string status = Request.Form["status"];

            //2.0 参数合法性验证
            if (Kits.IsInt(status) == false)
            {
                base.WriteError("状态必须为整数");
                return;
                //由于End()会产生一个子线程异常,所以推荐使用return;
                //Response.End();
            }
            if (string.IsNullOrEmpty(title) || string.IsNullOrEmpty(remark))
            {
                base.WriteError("标题和备注不能为空");
                return;
            }

            // 3.0 新增逻辑
            BlogPhotoAlblum entity = new BlogPhotoAlblum()
            {
                PaAuthor = 2,//UserManager.LogedUserInfo().Id,
                PaAddtime = DateTime.Now,
                PaCoverSrc = "null.jpg",
                PaIsDel = false,
                PaPhotoNum = 0,
                PaPLNum = 0,
                PaRemark = remark,
                PaTitle = title,
                PaStatu = int.Parse(status)
            };
            bll.Add(entity);

            //4.0 提示用户
            base.WriteSucess("数据新增成功");
        }

        #endregion

        #region 5.0 删除操作
        private void del()
        {
            string id = Request.QueryString["id"];
            if (Kits.IsInt(id) == false)
            {
                base.WriteError("id error");
                return;
            }
            BlogPhotoAlblum entity = bll.GetModel(int.Parse(id));
            entity.PaIsDel = true;
            bll.Update(entity);

            base.WriteSucess("删除数据成功");

        }
        #endregion

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

common。js

var ajaxHelper = {
    markXHR: function () {
        var xhr;
        //高版本浏览器才支持 new XMLHttpRequest() 操作
        if (window.XMLHttpRequest) {
            xhr = new XMLHttpRequest();
        } else //适配低版本浏览器的异步对象创建工作
        {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
        return xhr;
    },
    ajaxGet: function (url, callBackFun) {
        this.ajaxProcess("get", url, null, callBackFun);
    },
    ajaxPost: function (url, parms, callBackFun) {
        this.ajaxProcess("post", url, parms, callBackFun);
    },
    //通用的ajax请求包装方法,可以被ajaxGet和ajaxPost方法来调用
    //1、method:表示请求方法  2 url :表示请求的服务器路径  3 parms:只有post才有参数,如果是get请求则为null
    //4 callBackFun:回调函数,其逻辑代码是在调用方法中实现好以后,传入ajaxProcess 方法中的
    ajaxProcess: function (method, url, parms, callBackFun) {
        // 将字符串统一转换成小写
        var httpMethod = method.toLowerCase();
        //1.0 实例化异步对象
        var xhr = this.markXHR();
        //2.0 设置请求相关参数
        xhr.open(httpMethod, url, true);

        //3.0 设置请求报文头
        if (httpMethod == "get") {
            xhr.setRequestHeader("If-Modified-Since", "0");
        } else {
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        }

        //4.0 设置回调函数
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status == 200) {
                // 获取服务器响应回来的响应报文体的数据
                var result = xhr.responseText;
                //由于result 是一个json格式的字符串,所以在此处统一转换成js对象(数组),再传入回调函数
                var jsobj = JSON.parse(result);
                if (jsobj.status == "error") {
                    // alert(jsobj.msg);
                    msgbox.showMsgErr(jsobj.msg);
                } else {
                    // 调用回调函数,将js对象传入
                    callBackFun(jsobj);
                }
            }
        }

        //5.0 发送请求给服务器
        if (httpMethod == "get") {
            xhr.send(null);
        } else {
            xhr.send(parms);
        }

    }

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值