热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET程序中使用ajax和json

来现在这家公司以前,从未接触过webform,以前在学校做的项目是php,java以及asp.netmvc的,当时asp.netmvc用的是razor引擎,所以,一直与aspx.cs/aspx无缘,也听说过微软硬生生地把无状态连接改变为“有状态连接”的霸气之举,并且一举取得成功,如今,用上

来现在这家公司以前,从未接触过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进行局部刷新或控制,这一切都是那么完美。

下在来看一下一个精短的用例:

前台:

 <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default"  %>
 .....
 

后台的关键代码:

 public partial class _Default : System.Web.UI.Page
 {
     protected void Page_Load(object sender, EventArgs e)
     {
         Person p1 = new Person();
         p1.name = "zjq";
         p1.age = ;
         p1.sex = "man";
         p1.birth = DateTime.Now.AddDays(-);
         lover l=new lover();
         l.name="htt";
         l.sex="nv";
         l.age=;
         l.birth = DateTime.Now.AddDays(-);
         p1.lover = l;
         string jsonstr = JsonConvert.SerializeObject(p1);
         if (Request.QueryString["ajax"] != null)
         {
             string method=Request.QueryString["ajax"].ToString().Trim().ToLower();
             if (method == "add")
             {
                 string n3 = Server.UrlDecode((new System.IO.StreamReader(Request.InputStream)).ReadToEnd());
                 Response.Write("{data:{"+n3+",result:'s'}");
                 Response.End();
             }
             else if (method == "savejson")
             {
                 Person p = JsonConvert.DeserializeObject(new StreamReader(Request.InputStream).ReadToEnd());
                 int i = ;
             }
             else if (method == "getperson")
             {
                 Response.Clear();
                 Response.Write(jsonstr);
                 Response.End();
             }
             else if (method == "setperson")
             {
                 Person p = JsonConvert.DeserializeObject(new StreamReader(Request.InputStream).ReadToEnd());
                 string name = p.name;
                 Response.Clear();
                 Response.End();
             }
         }
     }
 }

用到的实体对象:

 public class Person:Object
 {
     public Person()
     {
         //
         // TODO: 在此处添加构造函数逻辑
         //
     }
     public string name { set; get; }
     public int age { get; set; }
     public string sex { get; set; }
     public lover lover { get; set; }
     public DateTime? birth { get; set; }
 }
 public class lover
 {
     public string name { get; set; }
     public string sex { get; set; }
     public int age { get; set; }
     public DateTime? birth { get; set; }
 }

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

object对象:

 

通过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\"}"

分析:

整个json都在“”包围中,并以{}开始结尾。

属性与值都用“”括起来,值为对象以及数字的时候则不用。

日期被直接转换成字符串的日期了,日期与时间用T格开,时间后面+时区

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

日期已经被正常转换。

没回传的数据默认为null。

数字直接被转换。

其它情况:

    关于时间的测试:

差不多就这么些了,还有好多没时间写,有空再写,小弟菜鸟一枚,大神们轻喷~~


推荐阅读
  • 前言:关于跨域CORS1.没有跨域时,ajax默认是带cookie的2.跨域时,两种解决方案:1)服务器端在filter中配置详情:http:blog.csdn.netwzl002 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 我将SpringMVC升级到Spring3.2.5.我的一些剩余调用即使存在,也会返回无法识别的字段异常.这是错误.Resolvingexceptionfrom ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • 在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。使用Gson解析json成对象时,默认将json里对应字段的值解析到java对象里对应字段的属性里面。然而,当我们自己定义的java对象里的属性名与json里的字段名不一样时,我们可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。本文介绍了使用@SerializedName注解解析json数据的方法,并给出了具体的使用示例。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • MVC中的自定义控件
    怎么样创建自定义控 ... [详细]
author-avatar
ga70752ga你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有