啊哈,时隔两个月,才开始写上一篇文章的后续,实在是惭愧.主要是年尾公司又来活了,忙得团团转,而且这段时间在自学mvc.我在上文中,提到过我对mvc框架的初步印象是:相比webform,算是回归了bs本质.这段时间的学习,也算是验证了这一点,没有了神(qi)奇(guai)的viewstate,所有前后端交互通过http请求向control或者其他的HttpHandel集中处理或是中转,整个流程的数据流转非常清晰.

  额,其实本来这个系列,我是很有一些东西想深入讲讲的,但学了mvc之后,才发现原来很多东西mvc框架早已经考虑到了,那我也就不讲太多了,本文即是这个系列的最后一文,还有,不知道小伙伴们看没看出来,我的标点符号全是半角的,额 这是因为我设置了强制使用半角,因为我被写代码过程中频繁的输入法转换弄烦了,如果给大家的阅读造成了一定程度的困扰,还请见谅. 好了,扯这么多废话,还不进入主题,估计看得人要骂人了.

  接上文:

  1,普通事件回发,请求提交人是form,http返回的数据就是整个页面的html代码,

页面会刷新 会休眠2s RequestCount +1。

这无疑是最不优美的做法,不仅网络数据传输量大,还需要重新请求一次页面head中声明引用的文件,虽然大部分情况有缓存,但还是会有一定的性能损耗。

2事件回发 通过up的AsyncPostBackTrigger 提交 提交人是form,http返回被up包裹部分的html代码及一些参数信息(个人无责任猜测,是给ScriptManager准备的,然后ScriptManager通过js(运行在客户端)修改页面的html来完成信息无刷新显示),

页面不会刷新 会休眠2s RequestCount +1

3 jquery ajax提交 提交人就是它自己,不是表单(同时这个时候的ispostback是为false的,这也是我注释要说明的东西,ajax如果在后面处理,页面会认为是第一次加载,会执行if里面的逻辑了)

最后 就是本文的肉戏了,页面无刷新 不会休眠   RequestCount 不变。

查看http,返回的信息非常简单,就是response.write的信息,

同时大家可以做个试验,把休眠两秒的逻辑注释,然后狂点两种无刷新按钮,明显的,jquery方式的ajax流畅的多。

4,表单提交,如果在up里面和2一样 在外面和1一样。

我先对这四种(第四种其实可以算是两种情况)情况做更进一步的解释.

第一种,就是我们常见的,最原始的处理手法,相当于是重新请求的目标页面一次,众所周知,http请求是无状态的,它也不会管你是第几次访问,反正你发起了请求,我就按asp.net框架的流程,按你设置的httpmodel, httphandel给你处理一遍.           ,iis也是从转发request到响应response

第二种呢? 首先我们可以知道,后台httphandel(我们自己写的页面类继承了Page,而Page实现了IHttpHandel接口,所以我这里说的httphandel就是我们写的页面类)处理http的逻辑,和第一种应该是一样的,为什么能够无刷新呢?

我上面的猜测,虽说是猜测,但也不是我自己瞎猜的,

给大家看下无刷新的http请求的数据

可以发现,第一,只有一条http请求被发起,第二相比常规post提交,提交的请求头里面,有个&__ASYNCPOST=true的标识,第三,response返回的信息里面,只有区区5行数据,而这5行,很明显,就是被UpdatePanel包裹的控件的html代码,和一些它自己使用的参数.

大家再自行观察一下常规post提交的数据,对比是比较明显的.

至于第四种,当提交按钮,没有被updatePanel包裹的时候,不受UP的影响,是完全等同于常规post提交了,如果放在up中,就会等同于第二种情况.

这里额外提一个我自己使用up遇到过的问题,就是我页面里面有个隐藏控件(runat Server),动态保存当前某个状态,但是我局部刷新,同时后台去改变hiddenfiled的值,结果发现hf的值并没有被改变,其实是因为我hf控件没有放在up里面,不受它的管理.所以局部刷新的时候,hf的值还是原来的值,尽管这时候它在viewstate中的值是新的.

好了,重点来了,第三种情况的无刷新是个怎么回事呢?

先上jb

  可以看出,它提交的信息非常简洁,而且全是我们手工自定义进去的,没有其他多余的信息,可以想象,这种方式毫无疑问可以带来很大的灵活性.

我解释下它的流程

先看前端:

 $(document).ready(function () {
$("#btnClentPost").click(function () {
$.ajax({
type: "POST",
data: "act=updateResult&cmsg=append from ajax",
success: function (msg) {
$("#lblReault").html("this is from ajax server:" + msg);
}
});
});
});

这就发起了一个http请求,

 success: function (msg) {
$("#lblReault").html("this is from ajax server:" + msg);
}

指的是,当httphandel处理完之后发回response,就会触发后面的匿名函数(事件)msg是response返回的信息,这个事件有几种重载,功能有细小差别,这里就不多谈了.

当http请求被发起,目标httphandel就会接受到这个请求,这里需要这种强调下的是,我没有声明action,所以它默认的就是当前页面,你完全可以自己指定action(url),也就是httphandel,

嗯,再引申一下,大家看到我不断提到httphandel,而没怎么提page aspx,ashx之类的字眼,其实也是为了贯彻我这系列文章的主线----http.

关于aspx和ashx哪个好,是不是应该每个ajax请去都建立一个ashx,这些涉及到架构设计方面的东西,我这里也不多谈,不管是webservice 还是Page页,还是wcf接口,web api什么的,在我这里,一视同仁的认为是httpHandel,它们只干两件事

1接收并处理request请求

2返回response

在我的例子中,httphandel就是后台Page页(再次强调,你可以任意定制它的httphandel)

 protected void Page_Load(object sender, EventArgs e)
{
string action = Request["act"];
if (!string.IsNullOrEmpty(action))
{
switch (action.ToLower())
{
case "updateresult":
ShowAjaxChange(Request["cmsg"]);
break;
case "getsectionpoint":
break;
}
}
//后续省略

前台jquery发起了ajax请求之后,经过asp.net的pipeline和httpmodel的一系列处理流程,最终page_load被调用

进入ShowAjaxChange

 //接收ajax传递过来的数据,并通过Response 做出处理
private void ShowAjaxChange(string cMsg)
{
Response.Clear();
Response.Write("S receive : " +cMsg +" Time : "+ DateTime.Now.ToString("HH:mm:ss fff"));
Response.End();
}

我需要解释下 Response.End(); 这句话是非常重要的,它代表的是 强制结束本次request的后续流程,返回response,

所以page_load里面我标记的  //后续省略   的代码,都是不会执行的,这也是我前面附加的一些奇怪说明的原因,也是它没有两秒休眠的原因.

当然这里是因为我为了写代码方便,和让业务逻辑代码集中的一个做法,如果你们用其他类型的httphandel,可能就不需要这样做了,用前面总结的话来说,就是,你只需要正确的处理这个http请求,返回正确的response,就一切ok!!

好了,这个系列算是写完了,也算是有始有终,可喜可贺啊!!(话说其实也只有3篇文吧,不过对于我这种写作小白来说,还是比较不容易的,呵呵)

由于以前我博客是在csdn写的,直接导入过来,好像格式会有点问题,有时间再调整(但愿我有).

还有的没说完的话,也留在后续的mvc系列里面讲吧,不过以我现在的mvc水平,大概是好久之后了.

最后,前面我提到了,jquery的原生ajax,它的自定义性很强,其实用途也是非常广泛多样的,我也准备写一个我认为比较有趣的用例,算是这个系列的补充.

CS Coder学习asp.net5个月的最大感悟:从http的角度重新认识asp.net(二)——我理解的ajax(二)的更多相关文章

  1. ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

    温馨提示:本文杂而乱,最终不知所云. Visual Studio 2015 RTM已经于2015年7月20号正式发布,我也在第一时间下载安装了起来. 虽然在5月份就开始使用RC版本,但是还是很期待正式 ...

  2. 让ASP.NET5在Jexus上飞呀飞

    就在最近一段时间,“Visual Studio 2015 CTP 5”(以下简称CTP5)发布了,CTP5的发布不仅标志着新一代的VisualStudio正式发布又向前迈出了一步,还标志着距离ASP. ...

  3. 为支持ASP.NET5跨平台,Jexus再添新举措

    Jexus作为一款运行于Linux/FreeBSD平台上,以支持ASP.NET著称的高性能HTTP服务器和反向代理服务器,继5.6版完成对OWIN标准应用的支持后,就把着力点放到了对ASP.NET5的 ...

  4. ASP.NET5

    ASP.NET5 2015年11月30日, ASP.NET 5 RC1 已经发布,本文尝试了一下ASP.NET5项目的创见一发布到IIS.开发环境,win10 64位,visual studio201 ...

  5. 了解ASP.NET5 Web应用程序结构

    本文参考ASP.NET5 官方文档 Understanding ASP.NET 5 Web Apps,加入了一些个人理解,理解不对的地方希望大家能指出,互相学习. ASP.NET 5 针对WEB编程引 ...

  6. Hello ASP.NET5

    2015年11月30日, ASP.NET 5 RC1 已经发布,本文尝试了一下ASP.NET5项目的创见一发布到IIS.开发环境,win10 64位,visual studio2015(已更新upda ...

  7. VS2015 ASP.NET5 Web项目

    VS2015 ASP.NET5 Web项目结构浅析   前言 本文个人同步博客地址http://aehyok.com/Blog/Detail/76.html 在安装好VS2015之后,一直想看看新版本 ...

  8. 从ASP.NET 升级到ASP.NET5(RC1) - 翻译

    前言 ASP.NET 5 是一次令人惊叹的对于ASP.NET的创新革命. 他将构建目标瞄准了 .NET Core CLR, 同时ASP.NET又是对于云服务进行优化,并且是跨平台的框架.很多文章已经称 ...

  9. ASP.NET5使用FaceBook登录

    原版教程 使用VS2015创建Web应用: 此教程使用的是FaceBook账号登录,需要添加相关的类,打开Nuget: 搜索Microsoft.AspNet.Authentication.Facebo ...

随机推荐

  1. 操作系统篇-调用门与特权级(CPL、DPL和RPL)

    || 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 在前两篇文章(<操作系统篇-浅谈实模式与保护模式>和<操作系统篇-分段机制与GDT|LDT>)中,我们提到 ...

  2. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  3. 有朋友问了数据库ID不连续,怎么获取上一篇和下一篇的文章?(不是所有情况都适用)

    呃 (⊙o⊙)…,逆天好久没写SQL了,EF用的时间长了,SQL都不怎么熟悉了......[SQL水平比较菜,大牛勿喷] 方法很多种,说个最常见的处理 因为id是自增长的,所以一般情况下下一篇文章的I ...

  4. .net erp(办公oa)开发平台架构概要说明之表单设计器

    背景:搭建一个适合公司erp业务的开发平台.   架构概要图: 表单设计开发部署示例图    表单设计开发部署示例说明1)每个开发人员可以自己部署表单设计至本地一份(当然也可以共用一套开发环境,但是如 ...

  5. OpenCV模板匹配算法详解

    1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...

  6. JS图片上传预览插件制作(兼容到IE6)

    其实,图片预览功能非常地常见.很意外,之前遇到上传图片的时候都不需要预览,也一直没有去实现过.现在手上的项目又需要有图片预览功能,所以就动手做了一个小插件.在此分享一下思路. 一.实现图片预览的一些方 ...

  7. Angular (SPA) WebPack模块化打包、按需加载解决方案完整实现

    文艺小说-?2F,言情小说-?3F,武侠小说-?9F long long ago time-1-1:A 使用工具,long long A ago time-1-2:A 使用分类工具,long long ...

  8. 熊乐:H3 BPM为加速企业流程管理提供源动力

    近日,在北京·金隅喜来登酒店,H3 BPM以"让天下没有难用的流程"为主题,正式发布H3 BPM10.0版本.全新的业务流程管理系统在易用性方面大大提升,并且全面支持Java与.N ...

  9. 总结iOS开发中的断点续传那些事儿

    前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...

  10. PC虚拟现实应用的性能分析与优化:从CPU角度切入

    如今,虚拟现实 (VR) 技术正日益受到欢迎,这主要得益于遵循摩尔定律的技术进步让这一全新体验在技术上成为可能.尽管虚拟现实能给用户带来身临其境般的超凡体验,但相比传统应用,其具有双目渲染.低延迟.高 ...