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

  以下是部分关键代码  

  首先是HTML代码:

  1. <fieldset>
  2. <legend>基本信息</legend>
  3. <div class="add_main" id="wrapper_add">
  4. <div id="errorInfo" class="error container"></div>
  5. <table width="100%" border="0" cellpadding="0" cellspacing="0" class="addForm">
  6. <tr>
  7. <th>目标对象:</th>
  8. <td>
  9. <asp:TextBox ID="obj_tbx" ClientIDMode="Static" CssClass="input" runat="server" Width="280px"></asp:TextBox>
  10. </td>
  11. <th width="18%">工作组:</th>
  12. <td width="32%">
  13. <asp:DropDownList ID="Group_ddl" ClientIDMode="Static" runat="server" Width="120px"></asp:DropDownList>
  14. </td>
  15. </tr>
  16. <tr>
  17. <th width="18%">项目分类:</th>
  18. <td width="32%">
  19. <asp:DropDownList ID="ProjectType_ddl" ClientIDMode="Static" runat="server" Width="200px"></asp:DropDownList>
  20. </td>
  21. <th width="18%">等级积分:</th>
  22. <td width="32%">
  23. <asp:DropDownList ID="score_ddl" ClientIDMode="Static" runat="server" Width="120px"></asp:DropDownList>
  24. </td>
  25. </tr>
  26. <tr>
  27. </tr>
  28. <tr>
  29. <th>目标地址:</th>
  30. <td colspan="3">
  31. <uc1:City ID="City1" runat="server" />
  32. <input id="adress_tbx" type="text" class="input" style="width: 280px;" />
  33. <a href="javascript:void(0);" onclick="Address_Click()">添加地址</a>
  34. <div id="result">
  35. </div>
  36. </tr>
  37. <tr>
  38. <th>要求完成时间:</th>
  39. <td colspan="3">
  40. <asp:TextBox ID="request_tbx" CssClass="ipt_date" ClientIDMode="Static" runat="server" onclick="WdatePicker()" Width="120px"></asp:TextBox>
  41. </td>
  42. </tr>
  43. <tr>
  44. <th valign="top">特别要求:</th>
  45. <td colspan="3">
  46. <asp:TextBox ID="special_tbx" ClientIDMode="Static" runat="server" Height="100px" TextMode="MultiLine" Width="501px"></asp:TextBox>
  47. </td>
  48. </tr>
  49. </table>
  50. </div>
  51. </fieldset>
  52. <fieldset>
  53. <legend>附件资料</legend>
  54. <uc1:Uploadify ID="Uploadify1" runat="server" />
  55. <table id="tb_fileview" style="display: none;" width="100%" border="0" cellpadding="0" cellspacing="0" class="list">
  56. <thead>
  57. <tr>
  58. <th>文件名称</th>
  59. <th>文件大小</th>
  60. <th>操作</th>
  61. </tr>
  62. </thead>
  63. <tbody>
  64. </tbody>
  65. </table>
  66. </fieldset>
  67. <div class="add_button">
  68. <input type="button" class="btn_yes" name="btn_release" id="btn_release" onclick="SubmitTask_Click()" value="发布任务" />    
  69. <input type="button" class="btn_yes" name="btn_add" id="btn_update" style="display: none;" onclick="UpdateSubtasks_Click()" value="更新任务" />    
  70. <input type="button" class="btn_yes" name="btn_add" id="btn_add" onclick="AddSubtasks_Click()" value="添加子任务" />
  71. </div>

  Javascript代码:

  1. <script type="text/javascript" charset="utf-8">
  2. var TaskAddressArray = new Array();//任务地址集合
  3. var TaskArray = new Array();//任务集合
  4. //Array Remove - By James (MIT Licensed)
  5. Array.prototype.remove = function (from, to) {
  6. var rest = this.slice((to || from) + 1 || this.length);
  7. this.length = from < 0 ? this.length + from : from;
  8. return this.push.apply(this, rest);
  9. };
  10. ///获取任务对象信息
  11. function gettaskmodel(Addresslist) {
  12. var taskmodel = new Object();
  13. taskmodel.Goal = $("#obj_tbx").val();//目标对象
  14. taskmodel.Group = $("#Group_ddl").val();//工作组值
  15. taskmodel.GroupName = $("#Group_ddl").find("option:selected").text();//工作组名称
  16. taskmodel.ProjectType = $("#ProjectType_ddl").val();//项目分类值
  17. taskmodel.ProjectTypeName = $("#ProjectType_ddl").find("option:selected").text();//项目分类名称
  18. taskmodel.Score = $("#score_ddl").val();//等级积分值
  19. taskmodel.ScoreName = $("#score_ddl").find("option:selected").text();//等级积分名称
  20. taskmodel.CarryDate = $("#request_tbx").val();//要求完成时间
  21. taskmodel.Special = $("#special_tbx").val();//特殊要求
  22. taskmodel.Address = Addresslist;//任务地址集合
  23. taskmodel.UploadFile = eval($("#hdJSON").val());//获取上传文件
  24.  
  25. return taskmodel;
  26. }
  27. ///获取地址对象信息
  28. function gettaskaddressmodel() {
  29. var taskaddress = new Object();//调查地址
  30. taskaddress.province = $("#ddl_province").val();//省份代码
  31. taskaddress.provinceName = $("#ddl_province").find("option:selected").text();//省份名称
  32. taskaddress.city = $("#ddl_city").val();//城市代码
  33. taskaddress.cityName = $("#ddl_city").find("option:selected").text();//城市名称
  34. taskaddress.counties = $("#ddl_counties").val();//区域代码
  35. taskaddress.countiesName = $("#ddl_counties").find("option:selected").text();//区域名称
  36. taskaddress.detail = $("#adress_tbx").val();//详细地址
  37.  
  38. return taskaddress;
  39. }
  40. //清空表单
  41. function ClearForm() {
  42. $("#obj_tbx").val("");
  43. $(".addForm select").find("option[value='']").attr("selected", true);
  44. $("#request_tbx").val("");
  45. $("#special_tbx").val("");
  46. $("#adress_tbx").val("");
  47. $("#hdJSON").val("");
  48. $("#tb_fileview").attr("style", "display:none");
  49. $("#tb_fileview").find("tbody").html("");
  50. TaskAddressArray = [];//清空地址数组
  51. ShowAddress();
  52.  
  53. }
  54. //表单赋值
  55. function SetForm(index) {
  56. $("#obj_tbx").val(TaskArray[index].Goal);
  57. $("#Group_ddl").find("option[value='" + TaskArray[index].Group + "']").attr("selected", true);
  58. $("#ProjectType_ddl").find("option[value='" + TaskArray[index].ProjectType + "']").attr("selected", true);
  59. $("#score_ddl").find("option[value='" + TaskArray[index].Score + "']").attr("selected", true);
  60. $("#request_tbx").val(TaskArray[index].CarryDate);
  61. $("#special_tbx").val(TaskArray[index].Special);
  62. $("#hdJSON").val(JSON.stringify(TaskArray[index].UploadFile));
  63. TaskAddressArray = TaskArray[index].Address;
  64. ShowAddress();
  65. ShowUpLoadFile(index);
  66. $("#btn_release,#btn_add").attr("style", "display:none");
  67. $("#btn_update").removeAttr("style").attr("onclick", "UpdateForm(" + index + ")");
  68. }
  69. //更新列表
  70. function UpdateForm(index) {
  71. var TaskModel = gettaskmodel(TaskAddressArray);
  72. ClearForm();
  73. TaskArray.splice(index, 1, TaskModel);
  74. ShowTaskView();
  75. $("#btn_release,#btn_add").removeAttr("style");
  76. $("#btn_update").removeAttr("onclick").attr("style", "display:none");
  77. }
  78. //添加地址事件
  79. function Address_Click() {
  80. var TaskAddressModel = gettaskaddressmodel();
  81. if (TaskAddressModel.province == "" || TaskAddressModel.city == "" || TaskAddressModel.counties == "" || TaskAddressModel.detail == "") {
  82. alert("您填写的地址不完整,请填写完整!");
  83. return;
  84. }
  85. TaskAddressArray.push(TaskAddressModel);
  86. ShowAddress();
  87. }
  88. ///显示地址
  89. function ShowAddress() {
  90. $("#result").html("");
  91. for (var i = 0; i < TaskAddressArray.length; i++) {
  92. $("#result").append("<p>" +
  93. TaskAddressArray[i].provinceName +
  94. TaskAddressArray[i].cityName +
  95. TaskAddressArray[i].countiesName +
  96. TaskAddressArray[i].detail + "     <a href=\"javascript:void(0);\" onclick=\"RemoverAddress_Click(" + i + ")\">删除</a></p>");
  97. }
  98. }
  99. function ShowUpLoadFile(index) {
  100. var FileArray = eval($("#hdJSON").val());
  101. if (FileArray.length > 0) {
  102. $("#tb_fileview").removeAttr("style");
  103. $("#tb_fileview").find("tbody").html("");
  104. for (var i = 0; i < FileArray.length; i++) {
  105. var trStr = "<tr>" +
  106. "<td>" + FileArray[i].FileName + "</td>" +
  107. "<td>" + FileArray[i].FileSize + "</td>" +
  108. "<td>" +
  109. "<a href=\"javascript:void(0)\" onclick=\"RemoveFileView_Click(" + i + ")\">删除</a></td>" +
  110. "</tr>";
  111. $("#tb_fileview").find("tbody").append(trStr);
  112. }
  113. }
  114. }
  115. //移除上传文件
  116. function RemoveFileView_Click(index) {
  117. var FileArray = eval($("#hdJSON").val());
  118. FileArray.remove(index);
  119. $("#hdJSON").val(JSON.stringify(FileArray));
  120. ShowUpLoadFile();
  121. }
  122. //移除地址数组
  123. function RemoverAddress_Click(id) {
  124. TaskAddressArray.remove(id);
  125. ShowAddress();
  126. }
  127. //移除任务数组
  128. function RemoveTaskView_Click(id) {
  129. TaskArray.remove(id);
  130. ShowTaskView();
  131. }
  132. ///添加子任务
  133. function AddSubtasks_Click() {
  134. if (TaskAddressArray.length == 0) {
  135. alert("您尚未添加任务地址,请正确添加任务地址!");
  136. return;
  137. }
  138. var TaskModel = gettaskmodel(TaskAddressArray);
  139. ClearForm();
  140. TaskArray.push(TaskModel);
  141. ShowTaskView();
  142. }
  143. //任务列表
  144. function ShowTaskView() {
  145. $("#tb_taskview").find("tbody").html("");
  146. if (TaskArray.length == 0) {
  147. alert("没有找到有效的任务数据!");
  148. return;
  149. }
  150. var ico = "";
  151. for (var i = 0; i < TaskArray.length; i++) {
  152. if (i == 0) {
  153. ico = "<span style=\"color:red;font-weight: bold;\">(主)</span>";
  154. } else {
  155. ico = "<span style=\"color:green;font-weight: bold;\">(次)</span>";
  156. }
  157. var trStr = "<tr>" +
  158. "<td>" + ico + "</td>" +
  159. "<td>" + TaskArray[i].GroupName + "</td>" +
  160. "<td>" + TaskArray[i].ProjectTypeName + "</td>" +
  161. "<td>" + TaskArray[i].ScoreName + "</td>" +
  162. "<td>" + TaskArray[i].Goal + "</td>" +
  163. "<td>" + TaskArray[i].Address[0].provinceName + "</td>" +
  164. "<td>" + TaskArray[i].Address[0].cityName + "</td>" +
  165. "<td>" + TaskArray[i].Address[0].countiesName + "</td>" +
  166. "<td>" + TaskArray[i].Address[0].detail + "</td>" +
  167. "<td>" + TaskArray[i].CarryDate + "</td>" +
  168. "<td>" + TaskArray[i].Special + "</td>" +
  169. "<td>" +
  170. "<a href=\"javascript:void(0)\" onclick=\"SetForm(" + i + ")\">编辑</a>  " +
  171. "<a href=\"javascript:void(0)\" onclick=\"RemoveTaskView_Click(" + i + ")\">删除</a></td>" +
  172. "</tr>";
  173. $("#tb_taskview").find("tbody").append(trStr);
  174. }
  175. }
  176. //提交任务信息
  177. function SubmitTask_Click() {
  178. if (TaskArray.length == 0) {
  179. alert("没有可以提交的任务信息,请确认已添加完成!");
  180. return;
  181. }
  182. if (confirm("您确定要提交该任务吗?")) {
  183. $.ajax({
  184. type: "POST",
  185. dataType: "JSON",
  186. url: "/AjaxHandler/TaskHandler.ashx?action=save",
  187. data: { TaskModel: JSON.stringify(TaskArray) },
  188. success: function (data) {
  189. if (data.code == 0) {
  190. if (confirm(data.msg)) {
  191. location.href = "TaskTracking.aspx";
  192. } else {
  193. location.href = location.href;
  194. }
  195. } else {
  196. alert(data.msg);
  197. }
  198. },
  199. error: function () {
  200. alert("任务信息提交失败,请稍候重试或联系管理员解决!");
  201. }
  202. });
  203. }
  204. }
  205. </script>

  处理接口代码:

  1. using Newtonsoft.Json;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Web;
  6. using IMPlatform.Web.App_Code;
  7. using IMPlatform.DomainEntities;
  8. using IMPlatform.Service.Business;
  9. using IMPlatform.Service;
  10. using System.Web.SessionState;
  11.  
  12. namespace IMPlatform.Web.AjaxHandler
  13. {
  14. /// <summary>
  15. /// TaskHandler 的摘要说明
  16. /// </summary>
  17. public class TaskHandler : IHttpHandler, IRequiresSessionState
  18. {
  19. IMPlatform.Web.App_Code.BackJson<Task[]> _json = new App_Code.BackJson<Task[]>();
  20. TaskService tService = new TaskService();
  21. TaskTypeService ptService = new TaskTypeService();
  22. TaskLogService tlogService = new TaskLogService();
  23. public void ProcessRequest(HttpContext context)
  24. {
  25. string action = context.Request["action"] == null ? "" : context.Request["action"].ToString();
  26. switch (action)
  27. {
  28. case "save":
  29. SaveTask(context);
  30. break;
  31. default:
  32. _json.code = -10;
  33. _json.msg = "参数错误!";
  34. context.Response.Write(JsonConvert.SerializeObject(_json));
  35. break;
  36. }
  37. }
  38.  
  39. public bool IsReusable
  40. {
  41. get
  42. {
  43. return false;
  44. }
  45. }
  46. /// <summary>
  47. /// 保存任务信息
  48. /// </summary>
  49. /// <param name="context"></param>
  50. private void SaveTask(HttpContext context)
  51. {
  52. try
  53. {
  54. string taskStr = context.Request["TaskModel"] == null ? "" : context.Request["TaskModel"].ToString();
  55. PermissionLogic logic = new PermissionLogic(System.Web.HttpContext.Current);
  56. string userid = logic.CurrentUserInfomation.UserID;
  57. List<Task> TaskModelList = JsonHelper<Task>.JsonToList(taskStr);
  58. string MainNum = "";//主任务编号
  59. foreach (Task item in TaskModelList)
  60. {
  61. task TaskEntity = new task();
  62. TaskEntity.Address = item.Address[0].detail;
  63. TaskEntity.AreaId = item.Address[0].counties;
  64. TaskEntity.CityId = item.Address[0].city;
  65. TaskEntity.ProvinceId = item.Address[0].province;
  66. TaskEntity.CreateDate = DateTime.Now;
  67. TaskEntity.Creator = userid;
  68. TaskEntity.Grade = Convert.ToInt32(item.Score);
  69.  
  70. System.Collections.Generic.List<task> list = tService.GetTaskList();
  71. bool flag = true;
  72. string num = "";
  73. while (flag)
  74. {
  75. num = String.Format("{0:D6}", new Random().Next(999999));
  76.  
  77. if (list.Where(x => x.TaskNo == num).Count() == 0)
  78. {
  79. flag = false;
  80. }
  81. }
  82. TaskEntity.TaskNo = num;
  83. TaskEntity.ParentTaskNo = MainNum;
  84. if (MainNum == "")
  85. {
  86. MainNum = num;
  87. }
  88. TaskEntity.ProjectTypeID = item.ProjectType;
  89. TaskEntity.RequireFinishDate = Convert.ToDateTime(item.CarryDate);
  90. TaskEntity.SpecialRequest = item.Special;
  91. TaskEntity.TargetObject = item.Goal;
  92. TaskEntity.TaskId = Guid.NewGuid().ToString();
  93. TaskEntity.TaskStatus = 0;
  94. TaskEntity.Group = item.Group;
  95. #region 组织地址信息
  96. List<taskaddress> addresslist = new List<taskaddress>();
  97. foreach (TaskAddress Address in item.Address)
  98. {
  99. taskaddress tk_address = new taskaddress();
  100. tk_address.ProvinceId = Address.province;
  101. tk_address.CityId = Address.city;
  102. tk_address.AreaId = Address.counties;
  103. tk_address.Address = Address.detail;
  104. addresslist.Add(tk_address);
  105. }
  106. #endregion
  107. #region 组织上传文件信息
  108. if (item.UploadFile != null)
  109. {
  110. List<taskfile> tflist = new List<taskfile>();
  111. foreach (var File in item.UploadFile)
  112. {
  113. taskfile tf = new taskfile();
  114. tf.FileName = File.FileName;
  115. tf.FilePath = File.FilePath;
  116. tf.SaveFileName = File.SaveName;
  117. tf.TaskId = TaskEntity.TaskId;
  118. u_user user = new PermissionLogic(HttpContext.Current).CurrentUser;
  119. tf.UploadUser = user != null ? user.UserID : Guid.Empty.ToString();
  120. tf.UploadDate = DateTime.Now;
  121. tf.FileStatus = 1;
  122. tflist.Add(tf);
  123. }
  124. tService.AddTaskFile(tflist);
  125. }
  126. #endregion
  127. tService.AddTask(TaskEntity, addresslist);
  128. }
  129. _json.code = 0;
  130. _json.msg = "任务发布成功!是否前去任务管理查看?";
  131. context.Response.Write(JsonConvert.SerializeObject(_json));
  132. }
  133. catch (Exception ex)
  134. {
  135. _json.code = -1;
  136. _json.msg = "系统异常,请稍候重试!异常消息:" + ex.Message;
  137. context.Response.Write(JsonConvert.SerializeObject(_json));
  138. }
  139. }
  140. }
  141. }

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

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

ASP.NET前后台交互之JSON数据的更多相关文章

  1. 详解ASP.NET提取多层嵌套json数据的方法

    本篇文章主要介绍了ASP.NET提取多层嵌套json数据的方法,利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,有兴趣的可以了解一下. 本文实例讲述了ASP.NET利用第三 ...

  2. ASP.NET Core中返回 json 数据首字母大小写问题

    ASP.NET Core中返回 json 数据首字母大小写问题 在asp.net core中使用ajax请求动态绑定数据时遇到该问题 后台返回数据字段首字母为定义的大写,返回的数据没有问题 但是在前台 ...

  3. 如何使用jQuery向asp.net Mvc传递复杂json数据

    jQuery提供的ajax方法能很方便的实现客户端与服务器的异步交互,在asp.net mvc 框架使用jQuery能很方便地异步获取提交数据,给用户提供更好的体验! 调用jQuery的ajax方法时 ...

  4. ASP.NET提取多层嵌套json数据的方法

    本文实例讲述了ASP.NET利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,具体例子如下. 假设需要提取的json字符串如下: {"name":&quo ...

  5. 使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇

    调用jQuery的ajax方法时,jQuery会根据post或者get协议对参数data进行序列化; 如果提交的数据使用复杂的json数据,例如: {userId:32323,userName:{fi ...

  6. ASP调用WebService转化成JSON数据,附json.min.asp

    首先定义SOAP数据,然后创建HTTP对象,然后使用POST提交,获取状态码为200,就说明调用成功,再进行下一步操作…… <!--#Include virtual="/Include ...

  7. JSON学习笔记一 —— 一些与移动端交互产生JSON数据的方法

    /**     * 测试的返回JSon方法,正式的不会用     * @author MrHandler     * @param reqCode     * @param joinStr     * ...

  8. 关于前后台交互生成json区别

    如何返回[object{xx:{}}]这种数组型json在服务器端return $arr[]=m;像这种都可以产生[Object { 0="9", 1="8", ...

  9. Asp.Net 前后台交互小结

    转自:http://blog.csdn.net/wlccomeon/article/details/17270427 一.前台调用后台           前台调用后台的方法一共可分为两大类:使用Ht ...

随机推荐

  1. Problem H: 零起点学算法87——打印所有低于平均分的分数

    #include<stdio.h> int main(){ ],b[]; while(scanf("%d",&n)!=EOF){ ; ;i<n;i++){ ...

  2. java程序中没有错,但是项目上面显示一个红叉的解决办法

    错误信息: 报Description  Resource Path Location Type Java compiler level does not match the version of th ...

  3. gitHub 基础命令

    设置开发人员信息 git config --global user.name "chen" git config --global user.email "xxxxx@q ...

  4. 记一个有趣的Java OOM!

    原文:https://my.oschina.net/u/1462914/blog/1630086 引言 熟悉Java的童鞋,应该对OOM比较熟悉.该类问题,一般都比较棘手.因为造成此类问题的原因有很多 ...

  5. Android关于JSON数据解析

    一.什么是json json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以 ...

  6. jQuery对象的序列化详解

    一.param() 方法创建数组或对象的序列化表示. 该序列化值可在进行 AJAX 请求时在 URL 查询字符串中使用. 语法: jQuery.param(object,traditional) ob ...

  7. 从外部重置一个运行中consumer group的消费进度

    对于0.10.1以上版本的kafka, 如何从外部重置一个运行中的consumer group的进度呢?比如有一个控制台,可以主动重置任意消费组的消费进度重置到12小时之前, 而用户的程序可以保持运行 ...

  8. 转: RSA原理 阮一峰的博客

    转:http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html 讲的非常细致,易懂.

  9. Java Web 设置默认首页 (也就是http://域名/项目名称/)访问的页面

    第一种: 默认的是index.jsp页面,放在webapp文件夹下 在web.xml配置如下 第二种: 默认的页面不是放在webapp文件夹下,而是放在web-inf下,那么此时可以用springMV ...

  10. maven中如何指定jdk的版本

    问题再现: 当我们每次创建maven项目时,jdk的默认版本是1.5,而我们一般机器上安装的是1.7以上的版本,jdk版本不一样,遇到这种问题,有两种解决办法: 至于右键设置jdk版本不推荐,在此不作 ...