正文转自: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进行有刷新或控制,这一切都是那么周。

 

生于来拘禁一下一个简洁的用例:

前台:

json 1😉

 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>

json 2😉

后台的要代码:

json 3😉

 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 }

json 4😉

 

故此到之实体对象:

json 5😉

 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 6😉

 

测试的始末:(重点在于针对json中的非字符串格式、json.net的应用办法的试用)

object对象:

json 7

json 8

透过JsonConvert.SerializeObject(p1)转换出的string【json对象】为:

“{\”name\”:\”zjq\”,\”age\”:14,\”sex\”:\”man\”,\”lover\”:{\”name\”:\”htt\”,\”sex\”:\”nv\”,\”age\”:14,\”birth\”:\”2010-05-10T15:56:45.9389376+08:00\”},\”birth\”:\”2010-05-19T15:56:43.515799+08:00\”}”

 

分析:
  1. 整个json都在“”包围中,并以{}开始结尾。
  2. 属性与值都用“”括起来,值为对象以及数字的时候则不用。
  3. 日期被直接转换成字符串的日期了,日期与时间用T格开,时间后面+时区

将数据变动至前台,显示,然后不做拍卖,直接传回后台,内容吗:{“name”:”zjq”,”sex”:”man”,”birth”:”2010-05-19T16:46:54.9250418
08:00″,”age”:14},后台用:JsonConvert.DeserializeObject<Person>(string)转来之Person对象啊:

json 9

json 10

分析:
  1. 日期已经被正常转换。
  2. 没回传的数据默认为null。
  3. 数字直接被转换。

其余情况:

    关于时间之测试:

前台的时间 后台接收后反序列化后的对象中的时间
结论:
前台传来的日期没有太高要求,但是必须放在“”中,作为字符串。

 

大抵就如此来了,还有众多尚无时间写,有空再写,小弟菜鸟一样朵,大神们轻喷~~

相关文章

网站地图xml地图