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="width: 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來作為反序列化的載體,反序列化成功之后的操作就更加簡單了,根據你的業務邏輯把這些數據做出相應的操作即可。

  呵呵,在這高手雲集的地方班門弄斧了,文章中錯誤之處還請給位看官指出和分享。讓我們共同進步!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM