国语自产精品视频在线看:您身边最放心的安全下载站! 最新软件|热门排行|软件分类|软件专题|厂商大全

国语自产精品视频在线看

技术教程
您的位置:首页网络编程.Net编程 → 利用ajax.dll进行asp.net ajax开发

利用ajax.dll进行asp.net ajax开发

我要评论 2009/09/10 19:10:47 来源:国语自产精品视频在线看 编辑:绿色资源站 [ ] 评论:0 点击:669次

Asynchronous JavaScript and XML(AJAX)最近掀起的高🌩潮,要完全归功于🍮Google在【zài】Google Suggest和😜Google Maps中的使用【yòng】。对【duì】💴ASP.NET而言🍬,AJAX不需要回传就🤠能进行🔴服务器【wù qì】✔端处理,从而使【cóng ér shǐ】客户机📩(浏览器【liú lǎn qì】)具有丰【jù yǒu fēng】富的服务器【wù qì】✔端能力【duān néng lì】。换句话【huàn jù huà】说,它为异步指派【bù zhǐ pài】和😜处理请求与服【qiú yǔ fú】务器【wù qì】✔响应提供了一【gòng le yī】个框架🚋。AJAX利用【yòng】了🚕一些不是很新颖的已有技术【yǒu jì shù】🧒,但是对【duì】💴这些技【zhè xiē jì】术(加到一起就是【qǐ jiù shì】AJAX)的爱好最近突🎵然升温。

请尝试🏢Michael Schwarz的【de】AJAX .NET包装器,通过它ASP.NET开发人员可以【yuán kě yǐ】🐹快速方【kuài sù fāng】便的【de】部署很容【shǔ hěn róng】易利用AJAX功能的【de】页面🙄。需要注👟意的【de】是,这个包🕠装器处🎧于初期开发阶段【duàn】,因此还没有完【méi yǒu wán】🤘全成熟【quán chéng shú】。

它是如【tā shì rú】何工作【hé gōng zuò】📊的✖——概述

AJAX依靠代【yī kào dài】理【lǐ】(broker)指派和处理【lǐ】往🌞返服务🍬器的请【qì de qǐng】求。对此,.NET包装器【bāo zhuāng qì】🆓依靠客【yī kào kè】户端🙎XmlHttpRequest对象。多数【shù】浏览器都支持📦XmlHttpRequest对象,这就是🎵选择它【xuǎn zé tā】的原因。因为包装器【bāo zhuāng qì】🆓的目的是隐藏XmlHttpRequest的实现,我们就不再详细讨论它了。
包装器【bāo zhuāng qì】🆓本身通✋过将🕶.NET函数【shù】🎙标记为📕AJAX方法来【fāng fǎ lái】工作。标记之【biāo jì zhī】🤾后【hòu】,AJAX就创建【jiù chuàng jiàn】对应的【duì yīng de】💜JavaScript函数【shù】🎙,这些函【zhè xiē hán】数【shù】🎙(和任何JavaScript函数【shù】一🛴样)作为代理可以【lǐ kě yǐ】在客户【zài kè hù】端🙎使用XmlHttpRequest调用【diào yòng】📸。这些代🐖理【lǐ】再映射回服务器端😾函数【shù】🎙。

复杂【zá】🎾吗?并不复杂【zá】🎾。我们来看一个【kàn yī gè】⭐例子。假设有💚一个【yī gè】⭐.NET函数:

ublic int Add(int firstNumber, int secondNumber)
{
return firstNumber + secondNumber;
}

AJAX .NET包装器【bāo zhuāng qì】将自动创建名为“Add”、带有两个参数的JavaScript函数【hán shù】。使用JavaScript(在客户机上)调用该🐄函数【hán shù】时😜,请求将📏传递给【chuán dì gěi】服务器🦓并把结【bìng bǎ jié】果返回【guǒ fǎn huí】⛎给客户【gěi kè hù】😼机。

初始设置

我们首🌘先介绍“安装【ān zhuāng】🕐”项目中使用的.dll的步骤【de bù zhòu】。如果您很清楚【hěn qīng chǔ】🚣如何添【rú hé tiān】⛪加.dll文件引用,可以跳过这一【guò zhè yī】🏭节。

首先,如果还没有的🍼话🌸,请下载最新的🗒AJAX版本【bǎn běn】🚋。解压下载的文件😕并把【bìng bǎ】ajax.dll放到项🙋目的引用文件【yòng wén jiàn】😕夹中【jiá zhōng】。在Visual Studio.NET中有机Solution Explorer的“References(引用【yòng】)”节点并选择Add Reference(添加引用【yòng】)。在打开【dǎ kāi】🚢的对话【de duì huà】🌸框中【kuàng zhōng】💎,单击🥍Browse(浏览)并找到【bìng zhǎo dào】ref/ajax.dll文件😕。依次单🧐击Open(打开【dǎ kāi】)和Ok(确认【què rèn】🦐)。这样就【zhè yàng jiù】可以用【yòng】AJAX .NET包装器【bāo zhuāng qì】编程了。

建立HttpHandler

为了保证正常【zhèng zhèng cháng】工作【gōng zuò】,第一步🈺是在web.config中设置🍉包装器的【de】HttpHandler。不需要详细解释HttpHandlers是什么及其如【jí qí rú】何工作【gōng zuò】,只要知🌦道它们【dào tā men】用于处👒理【lǐ】ASP.NET请求就📂足够了。比如【bǐ rú】♐,所有【suǒ yǒu】❌*.aspx页面请【yè miàn qǐng】求都由【yóu】📮
System.Web.UI.PageHandlerFactory类处理【lǐ】。类似的【de】,我们让所有【suǒ yǒu】对🚾ajax/*.ashx的【de】请求由【yóu】🌗Ajax.PageHandlerFactory处理【lǐ】:

〈configuration>
〈system.web>
〈httpHandlers>
〈add verb="POST,GET" path="ajax/*.ashx"
type="Ajax.PageHandlerFactory, Ajax" />
〈/httpHandlers>

〈system.web>
〈/configuration>

简言之😷,上面的代码告🏁诉ASP.NET,和指定🖥路径⏭(ajax/*.ashx)匹配的【pǐ pèi de】任何请【rèn hé qǐng】💔求都由Ajax.PageHandlerFactory而不是默认处🗻理程序工厂来处理【chù lǐ】。不需要创建ajax子目录【zǐ mù lù】✂,使用这个神秘的目录只是为【zhī shì wéi】了让其【le ràng qí】他【tā】HttpHandlers能够在自己建【zì jǐ jiàn】😠立的子👫目录中使用.ashx扩展【kuò zhǎn】。

建立页面

现在我【xiàn zài wǒ】们可以🍆开始编【kāi shǐ biān】码了。创建一🛐个新页🌗面【miàn】➰或者打开已有的页🦉面【miàn】➰,在file后的代码【dài mǎ】中🍨,为Page_Load事件添【shì jiàn tiān】加以下代码【dài mǎ】:

public class Index : System.Web.UI.Page{
private void Page_Load(object sender, EventArgs e){
Ajax.Utility.RegisterTypeForAjax(typeof(Index));
//
}
//
}


调用👙RegisterTypeForAjax将在页🚡面上引【miàn shàng yǐn】发后面的【de】JavaScript(或者在🛠页面中🙍手工加入以下两行代【liǎng háng dài】码【mǎ】):

〈script language="javascript" src="ajax/common.ashx">〈/script>
〈script language="javascript"
src="ajax/Namespace.PageClass,AssemblyName.ashx">〈/script>

其中最后一行的含义是:

Namespace.PageClass——当前页面的名【miàn de míng】称空间和类(通常是【tōng cháng shì】@Page指令中🔣Inherits属性的🍷值【zhí】🤞)

AssemblyName——当前页面所属程序集的名称💑(通常就【tōng cháng jiù】是项目名)
下面是【xià miàn shì】🐫AjaxPlay项目中sample.aspx页面的【yè miàn de】🎄结果例【jié guǒ lì】子🍹:

〈%@ Page Inherits="AjaxPlay.Sample" Codebehind="sample.aspx.cs" %>
〈html>
〈head>
〈script language="javascript" src="ajax/common.ashx">〈/script>
〈script language="javascript"
src="ajax/AjaxPlay.Sample,AjaxPlay.ashx">〈/script>
〈/head>
〈body>
〈form id="Form1" method="post" runat="server">

〈/form>
〈/body>
〈/html>

可以在浏览器📵中手工导航到src路径(查看源🤺代码,复制粘【fù zhì zhān】🎮贴路径【tiē lù jìng】)检查是【jiǎn chá shì】否一切🕸正常【zhèng cháng】🍘。如果两【rú guǒ liǎng】个路径都输出一些【yī xiē】(似乎👿)毫无意【háo wú yì】义的文本,就万事🦔大吉了【dà jí le】😙。如果什么也没输出或者出现ASP.NET错误【cuò wù】,则表明【zé biǎo míng】🌾有些地👞方出现问题。

即便不【jí biàn bú】知道【zhī dào】🐅HttpHandlers如何工作,上面的例子也【lì zǐ yě】很容易🍝理解。通过web.config,我们已【wǒ men yǐ】🌪经保证所有对【suǒ yǒu duì】ajax/*.ashx的请求🏳都由自⛰定义的处理程🈴序处理。显然,这里的【zhè lǐ de】两个脚【liǎng gè jiǎo】🥨本标签🐈将由自【jiāng yóu zì】定义的处理程🈴序处理。

创建服务器端函数

现在来【xiàn zài lái】创建可从客户端调用【duān diào yòng】中异步😦访问的服务器【fú wù qì】🧜端函数【duān hán shù】。因为目⏹前还不支持所【zhī chí suǒ】有的返回类型(不用担【bú yòng dān】😫心♑,将在【zài】目前的基础上开【chǔ shàng kāi】发新的版本),我们继续使用【xù shǐ yòng】简单的ServerSideAdd函数吧🌕。在【zài】file后的代码中🤛,向页面🎧添加下列代码🎗:

[Ajax.AjaxMethod()]
public int ServerSideAdd(int firstNumber, int secondNumber)
{
return firstNumber + secondNumber;
}

要注意,这些函数具有♉Ajax.AjaxMethod属性集。该属性告诉包【gào sù bāo】装器这🐼些方法【xiē fāng fǎ】创建javaScript代理【dài lǐ】,以便在客户端🕚调用【diào yòng】🚟。

客户端调用

最后一🦏步是用🛸JavaScript调用该【diào yòng gāi】函数【hán shù】⚓。AJAX包装器负责创建带有【jiàn dài yǒu】两个参【liǎng gè cān】数的JavaScript函数【hán shù】⚓Sample.ServerSideAdd。对这种最简单🏅的函数【hán shù】⚓,只需要🗿调用该【diào yòng gāi】方法并【fāng fǎ bìng】🌯传递两个数字:

〈%@ Page Inherits="AjaxPlay.Sample" Codebehind="sample.aspx.cs" %>
〈html>
〈head>
〈script language="javascript" src="ajax/common.ashx">〈/script>
〈script language="javascript"
src="ajax/AjaxPlay.Sample,AjaxPlay.ashx">〈/script>
〈/head>
〈body>
〈form id="Form1" method="post" runat="server">
〈script language="javascript">
var response = Sample.ServerSideAdd(100,99);
alert(response.value);
〈/script>
〈/form>
〈/body>
〈/html>

当然⏫,我们不希望仅仅用这【jǐn yòng zhè】种强大的能力来警告用户🏀。这就是所有客📒户端代【hù duān dài】理【lǐ】🖍(如🎿JavaScript Sample.ServerSideAd函数)还接受其他特性的原【xìng de yuán】🥧因。这种特【zhè zhǒng tè】🐽性就是💗为了处理【lǐ】🖍响应而【xiǎng yīng ér】调用的【diào yòng de】回调函数:

Sample.ServerSideAdd(100,99, ServerSideAdd_CallBack);

function ServerSideAdd_CallBack(response){
if (response.error != null){
alert(response.error);
return;
}
alert(response.value);
}


从上述代码【dài mǎ】😹中可以看到我们指定了另外【le lìng wài】一【yī】🎼个参数🌑。ServerSideAdd_CallBack(同样参【tóng yàng cān】见上述代码【dài mǎ】😹)是用于处理服🔇务器响应的客户端函🈺数🌑。这个回调函数【diào hán shù】🌑接收一【jiē shōu yī】个响应📡对象🌝,该对象【gāi duì xiàng】🌝公开了🐕三个主要性质【yào xìng zhì】

Value——服务器端函数实际返【shí jì fǎn】回的值(无论是字符串【zì fú chuàn】🚌、自定义对象还🕯是数据【shì shù jù】集⌚)。

Error——错误消【cuò wù xiāo】🔭息【xī】,如果有的话📗。

Request——xml http请求的🕺原始响【yuán shǐ xiǎng】应。

Context——上下文🆔对象【duì xiàng】。

首先我们检查error只看看🆎是否出现了错⭐误【wù】。通过在🙃服务器端函数【duān hán shù】中抛出异常【yì cháng】,可以很容易处理【lǐ】error特性【tè xìng】🏣。在这个【zài zhè gè】简化的例子中🚏,然后用【rán hòu yòng】🤶这个值📡警告用♈户。Request特性【tè xìng】🏣可用于获【huò】🏻得更多【dé gèng duō】信息(参见下一节)。

处理类型

返回复杂类型

Ajax包装器不仅能处理💯ServerSideAdd函数所返回的【fǎn huí de】整数💓。它目前【tā mù qián】还支持🐳integers、strings、double、booleans、DateTime、DataSets和DataTables,以及自【yǐ jí zì】定义类🌽和数组等基本【děng jī běn】类型【lèi xíng】🤵。其他所🤡有类型【lèi xíng】📇都返回🐚它们的【de】ToString值【zhí】。
返回的【fǎn huí de】DataSets和真正的【de】.NET DataSet差不多。假设一个服务【gè fú wù】器端函【qì duān hán】😛数返回DataSet,我们可💃以通过🚻下面的【de】代码在客户端【kè hù duān】显示其中的内【zhōng de nèi】容:

〈script language="JavaScript">
//Asynchronous call to the mythical "GetDataSet" server-side function
function getDataSet(){
AjaxFunctions.GetDataSet(GetDataSet_callback);
}
function GetDataSet_callback(response){
var ds = response.value;
if(ds != null && typeof(ds) == "object" && ds.Tables != null){
var s = new Array();
s[s.length] = "〈table border=1>";
for(var i=0; i〈ds.Tables[0].Rows.length; i++){
s[s.length] = "〈tr>";
s[s.length] = &qu

关键词【guān jiàn cí】🚜:ajax.dll,asp.net,ajax

阅读本文后您有什么感想? 已有 人给出评价!

  • 2 欢迎喜欢
  • 2 白痴
  • 2 拜托
  • 2 哇
  • 2 加油
  • 2 鄙视