zoukankan      html  css  js  c++  java
  • ASP.NET前后台交互之JSON数据

      最近由于项目需要做一个Ajax的搜集单表单的多重数据的需求,所以就采用了前端JQuery保存Object对象之后转换成JSON的数据源传递给后台处理的这样的形式,相信有不少人大多时候是接收后台给出的JSON数据格式,拿到前端来显示的形式。当然这也是我个人的经历简介而已,高手勿喷,写这篇文章的目的也是为了以后忘记了能够帮助会议。或许真的能够帮助到某些像我一个涉世不深的菜鸟。O(∩_∩)O

      以下是部分关键代码  

      首先是HTML代码:

        <fieldset>
            <legend>基本信息</legend>
            <div class="add_main" id="wrapper_add">
                <div id="errorInfo" class="error container"></div>
                <table width="100%" border="0" cellpadding="0" cellspacing="0" class="addForm">
                    <tr>
                        <th>目标对象:</th>
                        <td>
                            <asp:TextBox ID="obj_tbx" ClientIDMode="Static" CssClass="input" runat="server" Width="280px"></asp:TextBox>
                        </td>
                        <th width="18%">工作组:</th>
                        <td width="32%">
                            <asp:DropDownList ID="Group_ddl" ClientIDMode="Static" runat="server" Width="120px"></asp:DropDownList>
                        </td>
                    </tr>
                    <tr>
                        <th width="18%">项目分类:</th>
                        <td width="32%">
                            <asp:DropDownList ID="ProjectType_ddl" ClientIDMode="Static" runat="server" Width="200px"></asp:DropDownList>
                        </td>
                        <th width="18%">等级积分:</th>
                        <td width="32%">
                            <asp:DropDownList ID="score_ddl" ClientIDMode="Static" runat="server" Width="120px"></asp:DropDownList>
                        </td>
                    </tr>
                    <tr>
                    </tr>
                    <tr>
                        <th>目标地址:</th>
                        <td colspan="3">
                            <uc1:City ID="City1" runat="server" />
                            <input id="adress_tbx" type="text" class="input" style=" 280px;" />
                            <a href="javascript:void(0);" onclick="Address_Click()">添加地址</a>
                            <div id="result">
                            </div>
                    </tr>
                    <tr>
                        <th>要求完成时间:</th>
                        <td colspan="3">
                            <asp:TextBox ID="request_tbx" CssClass="ipt_date" ClientIDMode="Static" runat="server" onclick="WdatePicker()" Width="120px"></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <th valign="top">特别要求:</th>
                        <td colspan="3">
                            <asp:TextBox ID="special_tbx" ClientIDMode="Static" runat="server" Height="100px" TextMode="MultiLine" Width="501px"></asp:TextBox>
                        </td>
                    </tr>
                </table>
            </div>
        </fieldset>
        <fieldset>
            <legend>附件资料</legend>
            <uc1:Uploadify ID="Uploadify1" runat="server" />
            <table id="tb_fileview" style="display: none;" width="100%" border="0" cellpadding="0" cellspacing="0" class="list">
                <thead>
                    <tr>
                        <th>文件名称</th>
                        <th>文件大小</th>
                        <th>操作</th>
                    </tr>
                </thead>
                <tbody>
                </tbody>
            </table>
        </fieldset>
        <div class="add_button">
            <input type="button" class="btn_yes" name="btn_release" id="btn_release" onclick="SubmitTask_Click()" value="发布任务" />    
            <input type="button" class="btn_yes" name="btn_add" id="btn_update" style="display: none;" onclick="UpdateSubtasks_Click()" value="更新任务" />    
            <input type="button" class="btn_yes" name="btn_add" id="btn_add" onclick="AddSubtasks_Click()" value="添加子任务" />
        </div>
    

      Javascript代码:

    <script type="text/javascript" charset="utf-8">
            var TaskAddressArray = new Array();//任务地址集合
            var TaskArray = new Array();//任务集合
            //Array Remove - By James (MIT Licensed)  
            Array.prototype.remove = function (from, to) {
                var rest = this.slice((to || from) + 1 || this.length);
                this.length = from < 0 ? this.length + from : from;
                return this.push.apply(this, rest);
            };
            ///获取任务对象信息
            function gettaskmodel(Addresslist) {
                var taskmodel = new Object();
                taskmodel.Goal = $("#obj_tbx").val();//目标对象
                taskmodel.Group = $("#Group_ddl").val();//工作组值
                taskmodel.GroupName = $("#Group_ddl").find("option:selected").text();//工作组名称
                taskmodel.ProjectType = $("#ProjectType_ddl").val();//项目分类值
                taskmodel.ProjectTypeName = $("#ProjectType_ddl").find("option:selected").text();//项目分类名称
                taskmodel.Score = $("#score_ddl").val();//等级积分值
                taskmodel.ScoreName = $("#score_ddl").find("option:selected").text();//等级积分名称
                taskmodel.CarryDate = $("#request_tbx").val();//要求完成时间
                taskmodel.Special = $("#special_tbx").val();//特殊要求
                taskmodel.Address = Addresslist;//任务地址集合
                taskmodel.UploadFile = eval($("#hdJSON").val());//获取上传文件
    
                return taskmodel;
            }
            ///获取地址对象信息
            function gettaskaddressmodel() {
                var taskaddress = new Object();//调查地址
                taskaddress.province = $("#ddl_province").val();//省份代码
                taskaddress.provinceName = $("#ddl_province").find("option:selected").text();//省份名称
                taskaddress.city = $("#ddl_city").val();//城市代码
                taskaddress.cityName = $("#ddl_city").find("option:selected").text();//城市名称
                taskaddress.counties = $("#ddl_counties").val();//区域代码
                taskaddress.countiesName = $("#ddl_counties").find("option:selected").text();//区域名称
                taskaddress.detail = $("#adress_tbx").val();//详细地址
    
                return taskaddress;
            }
            //清空表单
            function ClearForm() {
                $("#obj_tbx").val("");
                $(".addForm select").find("option[value='']").attr("selected", true);
                $("#request_tbx").val("");
                $("#special_tbx").val("");
                $("#adress_tbx").val("");
                $("#hdJSON").val("");
                $("#tb_fileview").attr("style", "display:none");
                $("#tb_fileview").find("tbody").html("");
                TaskAddressArray = [];//清空地址数组
                ShowAddress();
    
            }
            //表单赋值
            function SetForm(index) {
                $("#obj_tbx").val(TaskArray[index].Goal);
                $("#Group_ddl").find("option[value='" + TaskArray[index].Group + "']").attr("selected", true);
                $("#ProjectType_ddl").find("option[value='" + TaskArray[index].ProjectType + "']").attr("selected", true);
                $("#score_ddl").find("option[value='" + TaskArray[index].Score + "']").attr("selected", true);
                $("#request_tbx").val(TaskArray[index].CarryDate);
                $("#special_tbx").val(TaskArray[index].Special);
                $("#hdJSON").val(JSON.stringify(TaskArray[index].UploadFile));
                TaskAddressArray = TaskArray[index].Address;
                ShowAddress();
                ShowUpLoadFile(index);
                $("#btn_release,#btn_add").attr("style", "display:none");
                $("#btn_update").removeAttr("style").attr("onclick", "UpdateForm(" + index + ")");
            }
            //更新列表
            function UpdateForm(index) {
                var TaskModel = gettaskmodel(TaskAddressArray);
                ClearForm();
                TaskArray.splice(index, 1, TaskModel);
                ShowTaskView();
                $("#btn_release,#btn_add").removeAttr("style");
                $("#btn_update").removeAttr("onclick").attr("style", "display:none");
            }
            //添加地址事件
            function Address_Click() {
                var TaskAddressModel = gettaskaddressmodel();
                if (TaskAddressModel.province == "" || TaskAddressModel.city == "" || TaskAddressModel.counties == "" || TaskAddressModel.detail == "") {
                    alert("您填写的地址不完整,请填写完整!");
                    return;
                }
                TaskAddressArray.push(TaskAddressModel);
                ShowAddress();
            }
            ///显示地址
            function ShowAddress() {
                $("#result").html("");
                for (var i = 0; i < TaskAddressArray.length; i++) {
                    $("#result").append("<p>" +
                        TaskAddressArray[i].provinceName +
                        TaskAddressArray[i].cityName +
                        TaskAddressArray[i].countiesName +
                        TaskAddressArray[i].detail + "     <a href="javascript:void(0);" onclick="RemoverAddress_Click(" + i + ")">删除</a></p>");
                }
            }
            function ShowUpLoadFile(index) {
                var FileArray = eval($("#hdJSON").val());
                if (FileArray.length > 0) {
                    $("#tb_fileview").removeAttr("style");
                    $("#tb_fileview").find("tbody").html("");
                    for (var i = 0; i < FileArray.length; i++) {
                        var trStr = "<tr>" +
                            "<td>" + FileArray[i].FileName + "</td>" +
                            "<td>" + FileArray[i].FileSize + "</td>" +
                            "<td>" +
                            "<a href="javascript:void(0)" onclick="RemoveFileView_Click(" + i + ")">删除</a></td>" +
                        "</tr>";
                        $("#tb_fileview").find("tbody").append(trStr);
                    }
                }
            }
            //移除上传文件
            function RemoveFileView_Click(index) {
                var FileArray = eval($("#hdJSON").val());
                FileArray.remove(index);
                $("#hdJSON").val(JSON.stringify(FileArray));
                ShowUpLoadFile();
            }
            //移除地址数组
            function RemoverAddress_Click(id) {
                TaskAddressArray.remove(id);
                ShowAddress();
            }
            //移除任务数组
            function RemoveTaskView_Click(id) {
                TaskArray.remove(id);
                ShowTaskView();
            }
            ///添加子任务
            function AddSubtasks_Click() {
                if (TaskAddressArray.length == 0) {
                    alert("您尚未添加任务地址,请正确添加任务地址!");
                    return;
                }
                var TaskModel = gettaskmodel(TaskAddressArray);
                ClearForm();
                TaskArray.push(TaskModel);
                ShowTaskView();
            }
            //任务列表
            function ShowTaskView() {
                $("#tb_taskview").find("tbody").html("");
                if (TaskArray.length == 0) {
                    alert("没有找到有效的任务数据!");
                    return;
                }
                var ico = "";
                for (var i = 0; i < TaskArray.length; i++) {
                    if (i == 0) {
                        ico = "<span style="color:red;font-weight: bold;">(主)</span>";
                    } else {
                        ico = "<span style="color:green;font-weight: bold;">(次)</span>";
                    }
                    var trStr = "<tr>" +
                        "<td>" + ico + "</td>" +
                        "<td>" + TaskArray[i].GroupName + "</td>" +
                        "<td>" + TaskArray[i].ProjectTypeName + "</td>" +
                        "<td>" + TaskArray[i].ScoreName + "</td>" +
                        "<td>" + TaskArray[i].Goal + "</td>" +
                        "<td>" + TaskArray[i].Address[0].provinceName + "</td>" +
                        "<td>" + TaskArray[i].Address[0].cityName + "</td>" +
                        "<td>" + TaskArray[i].Address[0].countiesName + "</td>" +
                        "<td>" + TaskArray[i].Address[0].detail + "</td>" +
                        "<td>" + TaskArray[i].CarryDate + "</td>" +
                        "<td>" + TaskArray[i].Special + "</td>" +
                        "<td>" +
                        "<a href="javascript:void(0)" onclick="SetForm(" + i + ")">编辑</a>  " +
                        "<a href="javascript:void(0)" onclick="RemoveTaskView_Click(" + i + ")">删除</a></td>" +
                    "</tr>";
                    $("#tb_taskview").find("tbody").append(trStr);
                }
            }
            //提交任务信息
            function SubmitTask_Click() {
                if (TaskArray.length == 0) {
                    alert("没有可以提交的任务信息,请确认已添加完成!");
                    return;
                }
                if (confirm("您确定要提交该任务吗?")) {
                    $.ajax({
                        type: "POST",
                        dataType: "JSON",
                        url: "/AjaxHandler/TaskHandler.ashx?action=save",
                        data: { TaskModel: JSON.stringify(TaskArray) },
                        success: function (data) {
                            if (data.code == 0) {
                                if (confirm(data.msg)) {
                                    location.href = "TaskTracking.aspx";
                                } else {
                                    location.href = location.href;
                                }
                            } else {
                                alert(data.msg);
                            }
                        },
                        error: function () {
                            alert("任务信息提交失败,请稍候重试或联系管理员解决!");
                        }
                    });
                }
            }
        </script>
    

      处理接口代码:

    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using IMPlatform.Web.App_Code;
    using IMPlatform.DomainEntities;
    using IMPlatform.Service.Business;
    using IMPlatform.Service;
    using System.Web.SessionState;
    
    namespace IMPlatform.Web.AjaxHandler
    {
        /// <summary>
        /// TaskHandler 的摘要说明
        /// </summary>
        public class TaskHandler : IHttpHandler, IRequiresSessionState
        {
            IMPlatform.Web.App_Code.BackJson<Task[]> _json = new App_Code.BackJson<Task[]>();
            TaskService tService = new TaskService();
            TaskTypeService ptService = new TaskTypeService();
            TaskLogService tlogService = new TaskLogService();
            public void ProcessRequest(HttpContext context)
            {
                string action = context.Request["action"] == null ? "" : context.Request["action"].ToString();
                switch (action)
                {
                    case "save":
                        SaveTask(context);
                        break;
                    default:
                        _json.code = -10;
                        _json.msg = "参数错误!";
                        context.Response.Write(JsonConvert.SerializeObject(_json));
                        break;
                }
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
            /// <summary>
            /// 保存任务信息
            /// </summary>
            /// <param name="context"></param>
            private void SaveTask(HttpContext context)
            {
                try
                {
                    string taskStr = context.Request["TaskModel"] == null ? "" : context.Request["TaskModel"].ToString();
                    PermissionLogic logic = new PermissionLogic(System.Web.HttpContext.Current);
                    string userid = logic.CurrentUserInfomation.UserID;
                    List<Task> TaskModelList = JsonHelper<Task>.JsonToList(taskStr);
                    string MainNum = "";//主任务编号
                    foreach (Task item in TaskModelList)
                    {
                        task TaskEntity = new task();
                        TaskEntity.Address = item.Address[0].detail;
                        TaskEntity.AreaId = item.Address[0].counties;
                        TaskEntity.CityId = item.Address[0].city;
                        TaskEntity.ProvinceId = item.Address[0].province;
                        TaskEntity.CreateDate = DateTime.Now;
                        TaskEntity.Creator = userid;
                        TaskEntity.Grade = Convert.ToInt32(item.Score);
    
                        System.Collections.Generic.List<task> list = tService.GetTaskList();
                        bool flag = true;
                        string num = "";
                        while (flag)
                        {
                            num = String.Format("{0:D6}", new Random().Next(999999));
    
                            if (list.Where(x => x.TaskNo == num).Count() == 0)
                            {
                                flag = false;
                            }
                        }
                        TaskEntity.TaskNo = num;
                        TaskEntity.ParentTaskNo = MainNum;
                        if (MainNum == "")
                        {
                            MainNum = num;
                        }
                        TaskEntity.ProjectTypeID = item.ProjectType;
                        TaskEntity.RequireFinishDate = Convert.ToDateTime(item.CarryDate);
                        TaskEntity.SpecialRequest = item.Special;
                        TaskEntity.TargetObject = item.Goal;
                        TaskEntity.TaskId = Guid.NewGuid().ToString();
                        TaskEntity.TaskStatus = 0;
                        TaskEntity.Group = item.Group;
                        #region 组织地址信息
                        List<taskaddress> addresslist = new List<taskaddress>();
                        foreach (TaskAddress Address in item.Address)
                        {
                            taskaddress tk_address = new taskaddress();
                            tk_address.ProvinceId = Address.province;
                            tk_address.CityId = Address.city;
                            tk_address.AreaId = Address.counties;
                            tk_address.Address = Address.detail;
                            addresslist.Add(tk_address);
                        }
                        #endregion
                        #region 组织上传文件信息
                        if (item.UploadFile != null)
                        {
                            List<taskfile> tflist = new List<taskfile>();
                            foreach (var File in item.UploadFile)
                            {
                                taskfile tf = new taskfile();
                                tf.FileName = File.FileName;
                                tf.FilePath = File.FilePath;
                                tf.SaveFileName = File.SaveName;
                                tf.TaskId = TaskEntity.TaskId;
                                u_user user = new PermissionLogic(HttpContext.Current).CurrentUser;
                                tf.UploadUser = user != null ? user.UserID : Guid.Empty.ToString();
                                tf.UploadDate = DateTime.Now;
                                tf.FileStatus = 1;
                                tflist.Add(tf);
                            }
                            tService.AddTaskFile(tflist);
                        }
                        #endregion
                        tService.AddTask(TaskEntity, addresslist);
                    }
                    _json.code = 0;
                    _json.msg = "任务发布成功!是否前去任务管理查看?";
                    context.Response.Write(JsonConvert.SerializeObject(_json));
                }
                catch (Exception ex)
                {
                    _json.code = -1;
                    _json.msg = "系统异常,请稍候重试!异常消息:" + ex.Message;
                    context.Response.Write(JsonConvert.SerializeObject(_json));
                }
            }
        }
    }
    

      在这里需要注意的是在处理函数中反序列化的时候,一定要创建一个跟你前端组织的JSON数据一样的Model来作为反序列化的载体,反序列化成功之后的操作就更加简单了,根据你的业务逻辑把这些数据做出相应的操作即可。

      呵呵,在这高手云集的地方班门弄斧了,文章中错误之处还请给位看官指出和分享。让我们共同进步!

  • 相关阅读:
    RabbitMQ入门(二)工作队列
    RabbitMQ入门之Hello World
    利用JMeter测试Tornado的多线程
    使用SQLAlchemy操作MySQL
    计算斐波那契数列的性能对比:Python,Java,Go
    PyCharm使用之配置SSH Interpreter
    Android数据绑定技术一,企业级开发
    Retrofit网络请求库应用02——json解析
    Servlet与Jsp的结合使用实现信息管理系统二
    Retrofit网络请求库应用01
  • 原文地址:https://www.cnblogs.com/wxlv/p/3962394.html
Copyright © 2011-2022 走看看