Community Server系列之四:Ajax在CS2.0中的应用1
Ajax技术在时下很热门,当然在CS2.0中也不例外的运用到了此技术,CS2中没有使用任何第三方Ajax控件,这就给我们提供一个研究Ajax机理的好地方,现介绍一下在CS2中Ajax的一些简单应用,并分析应用的原理。
我想要研究此技术最好的办法就是把代码分离出来放在自己的工程中,重现这些功能,在重现这些功能的时候一定会遇到这样或那样的问题,这恰好是我们应该着重研究的地方,所以让我们先来分离代码吧。
就拿CS中的一个Ajax小应用来说,当具有系统管理员权限的用户进入后,可以看到页面的标题和一些新闻内容是可以无刷新改变的,让我们先从此处下手吧。找到相应的控件页面,我们会发现,这些控件引用的一些文件,我现在先把它们列出来,下面的截图是我在分析TitleBar代码后分离出来的:
参看上图,有这么几个文件是很关键的:
AjaxManager.cs主要提供Ajax应用所需要的功能枚举等等,此文件包含三个类见图2,其中AjaxManager里面包含了几个静态方法,这个是关键。
Global.js这个文件主要包含两个重要的脚本函数来处理客户端的Ajax提交,另外还有一些很有用的js函数。
当然,这两个文件只是基础,要使用ajax必需要相应的页面的配合和对js编程的熟悉,现在让我们来了解一下Ajax的机理,Ajax说白了就是使用JS脚本和XMLHttp技术在后台提交数据到服务器,经过服务器相应方法的处理后把数据返回给客户端,由于数据在后台提交的,用户只看到数据的变化却看不到页面的刷新,功能酷酷的,实现起来也不难,这就开始了:
首先让我们看看在CS2中的Ajax的实现原理
按照上图的步骤来分析,并且以一个实例来了解它,这个示例很简单:在客户端提供两个用户输入的数字,提交到服务器进行计算,并把计算结果返回给客户端。
(在看下面的解说之前最好先下载本篇文章的示例程序结合着看。)
首先,我们建立一个aspx的页面,这里命名为Default.aspx,第一步要在提交请求的时候让页面注册Ajax_CallBack脚本(此脚本即是客户端和服务器通讯的关键),这里我们的后台代码很简单你可以在Page_Load方法里写成这样if(!this.IsPostBack) AjaxManager.Register(this,"Counter");可以看出调用了AjaxManager的静态方法,此方法的作用就是分析传进去的参数(这里的参数为this也就是页面的引用),生成客户端Ajax_CallBack脚本。在生成脚本之前自动去找在此页面有多少个带了AjaxMethod属性的方法,一个服务器方法对应一个客户端Ajax_CallBack方法,生成了客户端脚本后我们只需要在客户端写上少量的调用方法即可与服务器通讯了。在这里注册到客户端的脚本为:
return Ajax_CallBack('ASP.Default_aspx', null, 'CounterEnter', [first,second], clientCallBack, false, false, false, false,'/cs_ajax/Default.aspx?Ajax_CallBack=true');
}
有了这个脚本,客户端的工作并没有做完,因为还没有让客户端控件响应操作,这里就需要我们手动写一些操作代码了,不过一般不会太复杂,比如这里我们只需要在页面加多这样的js语句快:
$('txtResult').value= iteSettings.CounterEnter($('txtFirst').value,$('txtSecond').value,null).value; }
在客户端的按钮onclick事件上调用此函数即可,这段客户端的代码也许有人会迷糊,其中“$”函数是Glogal.js文件中的,等同于document.getElementById,iteSettings.CounterEnter则是调用前面注册到客户端的脚本,那么这段代码的意思是传递第一个和第二个输入筐的值到服务器器上的CounterEnter方法,并把返回的结果付给txtResult的文本框,前面已经提到过服务器上的CounterEnter方法此方法带有AjaxMethod属性,程序会自动找到此方法并执行的。至于怎么找到的,在后面详解,服务器方法在执行完此方法后返回结果,返回的值通过AjaxManager的相关方法以js脚本的形式Response给客户端(形式如:{value:’aaa’,error:null}),在得到这个返回对象后我们只需要调用其中的Value属性即可获取返回的值。
那么服务器怎样去分辨是Get请求还是PostBack或者AjaxPostBack呢,只有分清楚了这个才能在该执行的时候执行相应的方法,好的,其实在这里通过Get方法和AjaxPost的数据asp.net都不认为是回发给服务器,这样一来我们在PageLoad代码里的写的if(!this.IsPostBack)对两者请求都视为等效,那么通过后台的AjaxPost请求的页面同样会去执行AjaxManager.Register方法,那么我们看看此方法除了注册客户端JS代码还做了写什么呢。我们注意到在最后一段代码里有一句:control.PreRender += new EventHandler(OnPreRender);这句话就是在当即将Response给客户端页面的时候执行OnPreRender方法先,此方法的作用即是判断客户端提交的参数里是否有Ajax参数,如果有就判断此次Request为Ajax提交,需要执行服务器的相关方法,此处通过一系列的跳转和反射找到了应该调用的方法并执行,返回执行完后的结果给客户端并中止页面继续Responst,这样就完成了一个完整的Ajax调用,当然在AjaxManager里面有很多细节在这里没有详细写出来,如有异议或疑问希望多多指正和探讨,也希望此篇帖子能起到抛砖引玉的作用,给大家一个小小的参考。
下一篇将介绍Ajax在CS2中的高级应用,本文示例下载。
Community Server系列之四:Ajax在CS2.0中的应用1相关推荐
- Community Server系列之九:CS2中的用户管理1(MemberRole)
近期由于身心不适,一直没更新,现又拿起笔,继续这个系列-- CS中的用户及权限管理是比较复杂的,了解其中的用户及权限有关的机制对掌握CS的核心是至关重要的,现就对 ...
- 简单实现AJAX: ASP.NET2.0 中回调的实现及常见问题的解决
本文示例代码 接触asp.net时间并不长,对其中的很多新技术抱有浓厚的兴趣,最近在项目中碰到需要实现无刷新更新数据控件的问题,起初考虑使用ajax.pro,atlas实现,但感觉这两种实现对 ...
- 网络安全系列之四十六 在IIS6中配置目录安全性
Web站点默认是允许匿名访问的,某些特殊网站(或者虚拟目录)如果要求用户提供账号和密码才能访问,或者限定某些IP地址能(或不能)访问,那可以通过在Web站点属性的"目录安全性"选项 ...
- 修正CS2.0中的日历头显示错误
其实和前面版本中是一样的,刚刚改了,又有点小闲,所以,把它贴出来! 在CommunityServer.Blogs.Controls.WeblogCalendar中,找到构造函数,加入如下代码: pub ...
- Ajax Beta 2.0 中 AtlasToolKit Library 控件 Accordion 后台添加
学习 Accordion 时参照了一些例子,但都是简单的从 aspx 里固定好的 于是我就想从后台 cs 文件中不定的增加Accordion里的Pane AccordionPane newPane1 ...
- 【修真院“善良”系列之四】怎么识别招聘中的传销公司?
这里是修真院小课堂,本篇分析的主题是 [怎么识别招聘中的传销公司?] 先说事情的经过,再说怎么鉴别. 第一章 原来传销公司现在都发展到这个地步了? 刚到武汉分院没多久,把小四姐姐依依不舍的送上火车,没 ...
- KlayGE 4.0中Deferred Rendering的改进(五)完结篇:Post process
转载请注明出处为KlayGE游戏引擎 上一篇分析了KlayGE中实现实时全动态GI的方法,本篇是这个系列的完结篇,主要讲流水线的最后一段:Post process. Post process 在Kla ...
- Red Gate系列之四 SQL Data Compare 10.2.0.885 Edition 数据比较同步工具 完全破解+使用教程...
Red Gate系列之四 SQL Data Compare 10.2.0.885 Edition 数据比较同步工具 完全破解+使用教程 Red Gate系列文章: Red Gate系列之一 SQL C ...
- SCCM2012系列之四,SCCM2012部署前的SQL Server准备
SCCM2012系列之四,SCCM2012部署前的SQLServer准备 部署SCCM2012需要SQL数据库的支持.如果在生产环境,肯定是把数据库产品单独部署在服务器上,有可能还要考虑到高可用的因素 ...
最新文章
- 快速把web项目部署到weblogic上
- Mysql 主从复制+MHA搭建
- 2019-03-09-算法-进化(买卖股票的最佳时机 II)
- 第四章 Python 外壳 :代码结构
- 学习http only cookie以及javascript创建cookie的方式
- php反向解析域名,域名系统 – Cloudflare,反向DNS和php邮件,最终在垃圾邮件文件夹中...
- linux 基础知识大全(收藏这一篇就够了)
- 『已解决』IIS启动 服务无法在此时接受控制信息
- “天才少女”谷爱凌:奥运金牌在左,量子物理在右
- 利用SPSS进行person相关分析及散点图绘制
- Rabbit MQ 基础
- C# 通过网络和三菱的PLC通信
- ubuntu12.04.4安装tcl/tk和Tkinter
- JS最佳实践——红皮书
- 无人车系统(一):运动学模型及其线性化
- Vue教程(八)v-bind指令动态绑定
- Map.Entry 的理解
- pandas 统计一周中的每个位置的NO2平均浓度
- Chapter1 Vue基础
- CVPR 2020 | 《Learning to Transfer Texture from Clothing Images to 3D Humans》 论文解读