[转]asp.net的ajax以及json
本文转自:http://www.cnblogs.com/ensleep/p/3319756.html
来现在这家公司以前,从未接触过webform,以前在学校做的项目是php,java以及asp.net mvc的,当时asp.net mvc用的是razor引擎,所以,一直与aspx.cs/aspx无缘,也听说过微软硬生生地把无状态连接改变为“有状态连接”的霸气之举,并且一举取得成功,如今,用上了,觉得,webform并不像前辈们讲得那样差,就如同c++并不像人们觉得那么落后一样。
好了,开头就先说到这里,这里面就记录一下我对json.net的试用以及如何在aspx.cs文件中接收ajax,多数人用一般处理程序接收,即ashx文件。用一般处理程序的方法是正统的,因为如果用aspx.cs(即pager)接收的话,你多数将处理方法写在onload中,而之前创建页面控件树、初始化页面、处理viewstate、处理ProecessPostData都需要做,而这些于我们ajax而言是无用功,并且它们还会向我们的Response中插入一些数据,所以当我们在onload中处理完ajax要返回数据的时候,不得不Response.Clear()来清空,然后Response.Write()写入我们的数据,最后再用Response.End()来阻止页面生存周期的后序操作(它们会对Response进行好多处理并加入数据)。
这是从asp.net的运行机制上来讲的,我们应该用一般处理程序,但是,当我们只需要偶尔使用一ajax,时不时的用一下,而并非项目经理在宏观上给我们制地使用位置的时候,我们为了自己的方便,随手就新建一个ashx文件,是非常不明智的,而且对于svn来说,控制起来后患无穷,所以,我努力地找寻使用aspx.cs接收ajax的最方便的方法,并且将它的劣势换为它的优势。
首先:aspx.cs中处理ajax,正是因为viewstate被处理了,而且request对象也被正常生成了,你可以取得页面上所有控件的当前值,并不需要通过ajax的data传过来,想来用过ajax的人,对构造data数据都非常的头疼,少则几百个字符,多则上千个字符,而且涉及到引号的问题,单双要求灵活使用,好不容易构造完了,发现自己已经吐血了,日后自己再敢不想看这一段代码了。通过这种方式,我们可以将整个页面的服务器控件数据回传,并且不引发页面刷新,然后我们可以收到我们想要的数据,再通过js进行局部刷新或控制,这一切都是那么完美。
下在来看一下一个精短的用例:
前台:

1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
2 .....
3 <script type="text/javascript">
4
5 function setPerson() {
6 $.ajax({
7 url: "default.aspx?ajax=setPerson",
8 type: "POST",
9 dataType: "JSON",
10 data: '{"name":"' + $("#name").val() + '","sex":"' + $("#sex").val() + '","birth":"' + $("#birth").val() + '","age":' + $("#age").val() + '}',
11 sucess: function (data) {
12 }
13 });
14 }
15 function getPerson() {
16 $.ajax({
17 url: "default.aspx?ajax=getPerson",
18 type: "POST",
19 dataType: "JSON",
20 success: function (data) {
21 datar = data;
22 $("#name").val(data.name);
23 $("#sex").val(data.sex);
24 $("#birth").val(data.birth);
25 $("#age").val(data.age);
26 }
27 });
28 }
29 </script>

后台的关键代码:

1 public partial class _Default : System.Web.UI.Page
2 {
3 protected void Page_Load(object sender, EventArgs e)
4 {
5 Person p1 = new Person();
6 p1.name = "zjq";
7 p1.age = 14;
8 p1.sex = "man";
9 p1.birth = DateTime.Now.AddDays(-1213);
10 lover l=new lover();
11 l.name="htt";
12 l.sex="nv";
13 l.age=14;
14 l.birth = DateTime.Now.AddDays(-1222);
15 p1.lover = l;
16 string jsonstr = JsonConvert.SerializeObject(p1);
17 if (Request.QueryString["ajax"] != null)
18 {
19 string method=Request.QueryString["ajax"].ToString().Trim().ToLower();
20 if (method == "add")
21 {
22 string n3 = Server.UrlDecode((new System.IO.StreamReader(Request.InputStream)).ReadToEnd());
23 Response.Write("{data:{"+n3+",result:'s'}");
24
25 Response.End();
26 }
27 else if (method == "savejson")
28 {
29 Person p = JsonConvert.DeserializeObject<Person>(new StreamReader(Request.InputStream).ReadToEnd());
30 int i = 1;
31
32 }
33 else if (method == "getperson")
34 {
35 Response.Clear();
36 Response.Write(jsonstr);
37 Response.End();
38 }
39 else if (method == "setperson")
40 {
41 Person p = JsonConvert.DeserializeObject<Person>(new StreamReader(Request.InputStream).ReadToEnd());
42 string name = p.name;
43 Response.Clear();
44 Response.End();
45 }
46 }
47 }
48 }

用到的实体对象:

1 public class Person:Object
2 {
3 public Person()
4 {
5 //
6 // TODO: 在此处添加构造函数逻辑
7 //
8 }
9 public string name { set; get; }
10 public int age { get; set; }
11 public string sex { get; set; }
12 public lover lover { get; set; }
13 public DateTime? birth { get; set; }
14 }
15 public class lover
16 {
17 public string name { get; set; }
18 public string sex { get; set; }
19 public int age { get; set; }
20 public DateTime? birth { get; set; }
21 }

测试的内容:(重点在于对json中的非字符串格式、json.net的使用方法的试用)

分析: |
|
将数据转到前台,显示,然后不做处理,直接传回后台,内容为:{"name":"zjq","sex":"man","birth":"2010-05-19T16:46:54.9250418 08:00","age":14},后台用:JsonConvert.DeserializeObject<Person>(string)转出的Person对象为:

分析: |
|
前台的时间 | 后台接收后反序列化后的对象中的时间 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
结论:
|
前台传来的日期没有太高要求,但是必须放在“”中,作为字符串。 |
差不多就这么些了,还有好多没时间写,有空再写,小弟菜鸟一枚,大神们轻喷~~
[转]asp.net的ajax以及json的更多相关文章
- asp.net的ajax以及json
asp.net的ajax以及json 来现在这家公司以前,从未接触过webform,以前在学校做的项目是php,java以及asp.net mvc的,当时asp.net mvc用的是razor引擎,所 ...
- ASP.NET 5 - $.ajax post JSON.stringify(para) is null
JavaScript 代码: var para = {}; para.id = $("#ad-text-id").val(); para.title = $("#ad-t ...
- ASP.NET jquery ajax传递参数
第一种:GET传递 前台 ajax GET 传递 :即在请求的地址后面加上参数,URL地址长度有显示,安全性低 后台接收:Request.QueryString[“参数名字”]! 例如: func ...
- 解决ASP.NET MVC(post数据)Json请求太大,无法反序列化(The JSON request was too large to be deserialized)
这个问题出现的场景并不是很多,当你向服务端异步(ajax)post数据非常大的情况下(比如做权限管理的时候给某个角色分配权限那么就可能会出现,我所遇到的就是该角色大概200个模块每个模块平均2个功能- ...
- ajax使用json数据格式--无效的 JSON 基元
ajax使用json数据格式提交 一开始这么写的 var flobj = { UserId: userid, ForbidSDT: ForbidSDT, ForbidEDT: ForbidEDT } ...
- [转贴] ASP.NET -- Web Service (.asmx) & JSON
[转贴] ASP.NET -- Web Service (.asmx) & JSON 以前没做过,但临时被要求 ASP.NET Web Service 要传回 JSON格式 找到网络上两篇好文 ...
- jQuery中使用Ajax获取JSON格式数据示例代码
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.JSONM文件中包含了关于“名称”和“值”的信息.有时候我们需要读取JSON格式的数据文件,在jQuery中 ...
- ASP.NET Core中返回 json 数据首字母大小写问题
ASP.NET Core中返回 json 数据首字母大小写问题 在asp.net core中使用ajax请求动态绑定数据时遇到该问题 后台返回数据字段首字母为定义的大写,返回的数据没有问题 但是在前台 ...
- qt qml ajax 获取 json 天气数据示例
依赖ajax.js类库,以下代码很简单的实现了获取天气json数据并展示的任务 [TestAjax.qml] import QtQuick 2.0 import "ajax.js" ...
随机推荐
- 与众不同 windows phone 8.0 & 8.1 系列文章索引
[源码下载] [与众不同 windows phone 7.5 (sdk 7.1) 系列文章索引] 与众不同 windows phone 8.0 & 8.1 系列文章索引 作者:webabcd ...
- python-set集合类方法
s1=set([11,22,33,44,'Tom','tony',11,77,2.5,])返回的是{11,22,33,44,'Tom','tony',77,2.5}(注意:返回的并不是一个字典,只是告 ...
- (八)play之yabe项目【身份验证】
(八)play之yabe项目[身份验证] 博客分类: 框架@play framework 添加身份验证 play提供了一个模块-Secure(安全模块),用来做身份验证 允许Secure模块 修改 ...
- css导航栏
几个导航栏也算对学过知识的回顾,总有新的收获,下面是学习过程中敲的代码: <!DOCTYPE HTML> <html> <head> <title>&l ...
- sublimeText插件推荐
工欲善其事必先利其器.sublimeText是前端开发工程师的一把利器,它的优点包含: 随时保留文件的修改 Goto Anything,智能搜索; 简单全面的插件体系; 代码地图; 快速启动 ... ...
- NPOI导出数据到Excel
NPOI导出数据到Excel 前言 Asp.net操作Excel已经是老生长谈的事情了,可下面我说的这个NPOI操作Excel,应该是最好的方案了,没有之一,使用NPOI能够帮助开发者在没有安装微 ...
- Python基础(6)--条件、循环
本文的主要内容是 Python 的条件和循环语句以及与它们相关的部分. 我们会深入探讨if, while, for以及与他们相搭配的else,elif,break,continue和pass语句. 本 ...
- Fragment官方解析
由于fragment和activity的生命周期很类似,对activity不熟悉的可以参考–深入了解Activity-生命周期, 深入理解Activity-任务,回退栈,启动模式, 概要 A Frag ...
- JAVA EE(简述)
一.平台概述 JavaEE的全称是Java Enterprise Edition,它是一个开发分布式企业级应用的规范和标准 Java 平台三个版本: Java ME(Java Micro Edit ...
- Android线程管理(二)——ActivityThread
线程通信.ActivityThread及Thread类是理解Android线程管理的关键. 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用. ...