仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 988|回复: 12
打印 上一主题 下一主题

[学习教程] ASP.NET网页编程之ASP.NET 利用Ajax仓酷云

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-18 11:16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我也不知道,我原来理解的,NET就是C++编程,只是与net网页编程相对,呵呵。以为.ET就是高级C++编程。之前在Ajax开端了解中先容了对Ajax的开端了解,本文将先容在ASP.NET中怎样便利利用Ajax,第一种固然是利用jQuery的ajax,功效壮大并且操纵复杂便利,第二种是利用.NET封装好的ScriptManager。
$.ajax向一般页面发送get哀求

这是最复杂的一种体例了,先复杂懂得jQueryajax的语法,最经常使用的挪用体例是如许:$.ajax({settings});有几个经常使用的setting,全体参数及其注释能够往jQuery官方API文档查询
1.type:哀求体例get/post
2.url:哀求的Uri
3.async:哀求是不是为异步
4.headers:自界说的header参数
5.data:发往服务器的参数
6.dataType:参数格局,罕见的有string、json、xml等
7.contents:决意如何剖析response的一个”字符串/正则表达式”map
8.contentType:发送到服务器的额数据的内容编码范例,它的默许值是"application/x-www-form-urlencoded;charset=UTF-8""。
9.success:哀求乐成后挪用的句柄
10.error:哀求失利后挪用的句柄
没利用过jQuery的ajax话如许看有些云里雾里的感到,来看一个复杂例子
起首利用VisualStudio新建一个WebApplication,把jQuery.js引进project,然后增加两个页面,Default.aspx作为测试用
Default.aspx

  1. <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Default.aspx.cs"Inherits="Web.Default"%><!DOCTYPEhtml><html><headrunat="server"><title>Ajax</title><scriptsrc="jQuery.js"type="text/javascript"></script><styletype="text/CSS">html,body,form{width:100%;height:100%;padding:0px;margin:0px;}#container{margin:100px;height:300px;width:500px;background-color:#eee;border:dached1px#0e0;}</style></head><body><formid="form1"runat="server"><divid="container"><inputtype="button"value="TestAjax"onclick="testGet()"/><br/></div><scripttype="text/javascript">functionsetContainer(text){document.getElementById("container").innerHTML+=(<br/>+text);}functiontestGet(){$.ajax({type:get,url:NormalPage.aspx,async:true,success:function(result){alert(result);},error:function(){setContainer(ERROR!);}});}</script></form></body></html>
复制代码


NormalPage.aspx作为哀求页面,先不做任那边理。在Default.aspx页面中的JavaScript中能够看到testGet函数就使用jQuery的ajax向Normal.aspx发送了了一个get哀求,没写的参数利用jQuery默许参数,这个挪用没利用任何参数,复杂向Normal.aspx页面发送哀求,哀求乐成则alert全体response(即success办法参数:result,jQuery会把responseText传进success办法第一个参数),哀求失利则向DIV中增加一行毛病提醒文本。假如统统一般,能够看到页面弹出对话框,对话框内内容便是Normal.aspx页面内容

一个复杂的get哀求完成了,如许的了局一样平常没有多年夜用途,也不是ajax企图地点,利用Ajax次要是想利用JavaScript能够异步向服务器发送特定哀求,猎取服务器相干数据,好比向服务器扣问天色,然后取得天色数据,更新页面,而不是猎取全部页面,换句话说,利用Ajax自己就是为了挣脱更新全部页面来更新页面数据这类形式,仅仅必要服务器给我们数据便可,这就必要挪用服务器真个特定办法。
$.ajaxGET哀求挪用服务器特定办法

我们这时候候必要修正NormalPage.aspx,为其增加几个办法供Default.aspx测试挪用

  1. usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;namespaceWeb{publicpartialclassNormalPage:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){stringaction=Request.QueryString["action"];Response.Clear();//扫除一切之宿世成的Response内容if(!string.IsNullOrEmpty(action)){switch(action){case"getTime":Response.Write(GetTime());break;case"getDate":Response.Write(GetDate());break;}}Response.End();//中断Response后续写进举措,包管Response内只要我们写进内容}privatestringGetDate(){returnDateTime.Now.ToShortDateString();}privatestringGetTime(){returnDateTime.Now.ToShortTimeString();}}}
复制代码


然后为Default.aspx增加一个新的办法,并修正button的onclick办法为新写的函数

  1. functiontestGet2(){$.ajax({type:get,url:NormalPage.aspx,async:true,data:{action:getTime},success:function(result){setContainer(result);},error:function(){setContainer(ERROR!);}});}
复制代码


testGet2函数是在testGet函数的基本上做了些许修正,起首对success办法做了变动,把失掉的response写到页面;然后对哀求增加了data参数,哀求向服务器发送了一个action:getTime的键值对,在get哀求中jQuery会把此参数转为url的参数,下面写法和这类写法效果一样

  1. functiontestGet3(){$.ajax({type:get,url:NormalPage.aspx?action=getTime,async:true,success:function(result){setContainer(result);},error:function(){setContainer(ERROR!);}});}
复制代码


看一下实行效果,这是Chrome的监督了局

假如调试我们发明这个哀求挪用的服务器页面NormalPage.aspx的GETime办法,而且response中只包括对有效的数据,假如把哀求中参数的值改成getDate,那末就会挪用对应GetDate办法。
$.ajaxPOST与json

如许向一个页面发送哀求然后在Load事务处置程序中依据参数挪用分歧办法,扫除Response,写进Response,停止Response,并且传进的参数范围性太年夜,好专业的赶脚,看看专业些办理办法。为project增加一个GeneralHandler范例文件,关于HttpHandler相干内容本文不做具体注释,只需晓得它能够十分轻量级的处置HTTP哀求,不必走烦琐的页面熟命周期处置各类非必须数据。
Handler.ashx.cs

  1. usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingNewtonsoft.Json;namespaceWeb{///<summary>///SummarydescriptionforHandler///</summary>publicclassHandler:IHttpHandler{publicvoidProcessRequest(HttpContextcontext){Studentstu=newStudent();intId=Convert.ToInt32(context.Request.Form["ID"]);if(Id==1){stu.Name="Byron";}else{stu.Name="Frank";}stringstuJsonString=JsonConvert.SerializeObject(stu);context.Response.Write(stuJsonString);}publicboolIsReusable{get{returnfalse;}}}}
复制代码


关于这个类语法本文不做具体申明,每次倡议HTTP哀求ProcessRequest办法城市被挪用到,Post范例哀求参数和几回再三Request对象的Form中获得,每次依据参数ID值前往对应json对象字符串,为了展现json格局数据交互,必要为项目引进json.net这一开源类库处置对象序列化反序列化成绩,然后创立一个Student类文件
Student.cs

  1. usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;namespaceWeb{publicclassStudent{publicintID{get;set;}publicstringName{get;set;}}}
复制代码


看看页面怎样处置

  1. functiontestPost(){$.ajax({type:post,url:Handler.ashx,async:true,data:{ID:1},success:function(result){setContainer(result);varstu=eval((+result+));setContainer(stu.ID);setContainer(stu.Name);},error:function(){setContainer(ERROR!);}});}
复制代码


了局是这个模样的

下面代码向Handler.ashx发送一Post哀求,比且带有参数{ID:’1’},能够看到了局,假如用调试工具能够发明,失掉的result是一个json格局的字符串,也就是往Response写的对象序列化后的了局。如许就完成了对照专业些的体例挪用Ajax,可是有一个成绩仍旧存在,HttpHandler会主动挪用ProcessRequest办法,可是也只能挪用该办法,假如想挪用分歧办法只能像一般页面那样传送一个参数标明挪用哪一个办法,大概写分歧的Handler文件。
WebService与ScriptManager

微软一直很知心,看看微软怎样处置下面的狐疑,那就是使用WebService,WebService共同SCriptManager有客户端挪用的才能,在项目中增加一个Webservice文件
WebService.asmx

  1. usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Services;namespaceWeb{///<summary>///SummarydescriptionforWebService///</summary>[WebService(Namespace="http://tempuri.org/")][WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)][System.ComponentModel.ToolboxItem(false)]//ToallowthisWebServicetobecalledfromscript,usingASP.NETAJAX,uncommentthefollowingline.[System.Web.Script.Services.ScriptService]publicclassWebService:System.Web.Services.WebService{[WebMethod]publicStudentGetStudent(intID){if(ID==1){returnnewStudent(){ID=1,Name="Byron"};}else{returnnewStudent(){ID=2,Name="Frank"};}}
复制代码
[WebMethod]
publicstringGetDateTime(boolisLong)
{
if(isLong)
{
returnDateTime.Now.ToLongDateString();
}
else
{
returnDateTime.Now.ToShortDateString();
}
}
  1. }}
复制代码


代码中加黄的code默许是被正文失落的,要想让客户端挪用必要把正文往失落,Service中界说了两个办法,写个测试办法让客户端挪用第一个办法依据参数前往对应对象,起首必要在页面from内加上ScriptManager,援用方才写的WebService文件
Default.aspx

  1. <formid="form1"runat="server"><asp:ScriptManagerID="clientService"runat="server"><Services><asp:ServiceReferencePath="~/WebService.asmx"/></Services></asp:ScriptManager><divid="container"><inputtype="button"value="TestAjax"onclick="testPost2()"/><br/></div>...
复制代码


然后增加JavaScript测试代码

  1. usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;namespaceWeb{publicpartialclassNormalPage:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){stringaction=Request.QueryString["action"];Response.Clear();//扫除一切之宿世成的Response内容if(!string.IsNullOrEmpty(action)){switch(action){case"getTime":Response.Write(GetTime());break;case"getDate":Response.Write(GetDate());break;}}Response.End();//中断Response后续写进举措,包管Response内只要我们写进内容}privatestringGetDate(){returnDateTime.Now.ToShortDateString();}privatestringGetTime(){returnDateTime.Now.ToShortTimeString();}}}0
复制代码


测试代码中必要显现誊写WebService界说办法完全路径,WebService定名空间.WebService类名.办法名,而收支的参数列表前几个是挪用办法的参数列表,由于GetStudent只要一个参数,以是只写一个,假如有两个参数就按次写两个,别的两个参数能够很分明看出来是呼应乐成/失利处置程序。看看实行了局:

察看细心会发明利用ScriptManager和WebService组合有福利,在WebService中传回Student对象的时分并没有序列化成字符串,而是间接前往,看下面图发明对象已主动转换为一json对象,result了局能够间接操纵,果然十分知心。而上一个例子中我们失掉的response是一个json字符串,在客户端必要用eval使其转换为json对象。
ScriptManager+WebSefvice挪用ajax带来了很年夜的便当性,但同时就义了良多天真性,我们没法像jQuery那样指定良多设置有无一举两得的举措呢
$.ajax+WebService

jQuery挪用Handler几近完善了,可是不克不及处置多个办法,下面例子我们能够发明WebService能够完成这一功效,那末能不克不及jQUery挪用WebService的分歧办法呢?谜底是一定的,试一试用jQuery挪用方才WebService界说的第二个办法。写一个测试函数

  1. usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;namespaceWeb{publicpartialclassNormalPage:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){stringaction=Request.QueryString["action"];Response.Clear();//扫除一切之宿世成的Response内容if(!string.IsNullOrEmpty(action)){switch(action){case"getTime":Response.Write(GetTime());break;case"getDate":Response.Write(GetDate());break;}}Response.End();//中断Response后续写进举措,包管Response内只要我们写进内容}privatestringGetDate(){returnDateTime.Now.ToShortDateString();}privatestringGetTime(){returnDateTime.Now.ToShortTimeString();}}}1
复制代码


挪用体例没有多年夜变更,复杂仍旧,只需把URL改成WebService路径+必要挪用的办法名,然后把参数放到data里就能够了。我们看看了局:

我之所以想学。NET,是因为一直觉的BILLGATES好厉害,希望有一天能去微软,虽然现在还距离遥远,呵呵:)
admin 该用户已被删除
沙发
发表于 2015-1-20 18:59:39 | 只看该作者
如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
冷月葬花魂 该用户已被删除
板凳
发表于 2015-1-29 15:03:59 | 只看该作者
ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。
飘灵儿 该用户已被删除
地板
发表于 2015-2-1 10:39:38 | 只看该作者
但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。
第二个灵魂 该用户已被删除
5#
发表于 2015-2-6 18:30:04 | 只看该作者
ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
乐观 该用户已被删除
6#
发表于 2015-2-8 18:54:00 | 只看该作者
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
愤怒的大鸟 该用户已被删除
7#
发表于 2015-2-9 22:58:47 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
海妖 该用户已被删除
8#
发表于 2015-2-26 19:46:45 | 只看该作者
但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。
简单生活 该用户已被删除
9#
发表于 2015-3-8 17:05:20 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
飘飘悠悠 该用户已被删除
10#
发表于 2015-3-8 17:32:06 | 只看该作者
主流网站开发语言之PHPHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。
若天明 该用户已被删除
11#
发表于 2015-3-11 07:05:03 | 只看该作者
但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。
莫相离 该用户已被删除
12#
发表于 2015-3-17 23:07:55 | 只看该作者
逐步缩小出错代码段的范围,最终确定错误代码的位置。
不帅 该用户已被删除
13#
发表于 2015-3-25 05:02:30 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:04

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表