Karl Seguin

适用于:
AJAX(异步 JavaScript 和 XML)
Microsoft AJAX.NET
Microsoft ASP.NET

摘要:问询哪些将 AJAX(异步 JavaScript 和 XML)用于您的 Microsoft
ASP.NET 应用程序,使该互动性更胜、响应更及时。

下载本文的代码示例 AjaxASPNETCS.msi(使用 C#
语言)

下载本文的代码示例 AjaxASPNETVB.msi(使用 Visual Basic
语言)

图片 1

本页内容
简介
什么是 AJAX?
用于 ASP.NET 的 AJAX
手头的 AJAX
AJAX 与您
结论

简介

于开始 Web 编程以来,在 Web
应用程序和桌面应用程序之间一直存在正在无数增选。例如,人们日常认为 Web
应用程序提供的用户界面类型没有桌面应用程序提供的用户界面类型那样丰富。另一方面,Web
应用程序是单身的平台,其开发机制比较简单。提供响应更及时的应用程序看似是平桩简单的天职,但对于
Web 开发人员来说可是直以来用攻克的领域。

传统意义上,只能通过奔 Web
服务器交由新的乞求来探寻对用户输入所开的应。在某些情况下,开发人员可以运用
JavaScript
在客户端上加载所有响应,从而提供更好之用户体验。此技术的常见示例是基于所选国家/地区来动态加载一系列州或省。遗憾之是,在不少动静下,不以装有响应都回来或加载到
JavaScript 要再次好。返回操作会如了多的 UI
断开连接,或于客户端上得过的多寡,这常导致生成不易读之
JavaScript。AJAX
提供了同一种新的高中级挑,能够以维系这响应与灵活性的以利用基于服务器的应用程序。

图片 2回来页首

什么是 AJAX?

AJAX 是 Asynchronous JavaScript And XML(异步 JavaScript 和
XML)的缩写,它不是相同件技艺,而是多技能之联谊。AJAX
使用通信技术(通常为 SOAP 和
XML)发送和吸纳对服务器的异步请求/响应,然后用显示技术(JavaScript、DOM、HTML
和 CSS)处理应。如今,使用 AJAX
的应用程序是官的,因为大部分浏览器都支持这项必需的技巧。有关 AJAX
更详实的概念,请看 AJAX Wikipedia
entry
(英文)。

AJAX 到底是什么?AJAX 使你能够透过 JavaScript
调用执行服务器端方法,而未欲刷新浏览器。将其就是有受用户后台的小型请求/响应。如果你照无知情
AJAX 是呀,请圈 Google 上之少独周边示例:Google
Suggests
(英文)和
Google Maps(英文)。如果你不熟悉
AJAX,这点儿只应用程序的应会如您有点兴奋。

图片 3归来页首

用于 ASP.NET 的 AJAX

成千上万素促使 AJAX 应运而生。您或许无思量花几单钟头要几天来打探 AJAX
的里边原理,而是又期待今天尽管开始创造启用了 AJAX
的应用程序,来满足现有需求(如果你确实想明白 AJAX
内部工作原理,我自然不是好了解的人)。开发人员可以就此来很快入门的工具发出很多。不过我们用专门关注由
Michael Schwarz 编写的源代码开放的免费 Ajax.NET。Ajax.NET
考虑到具备的落实细节是因 .NET 的,并且能给扩大。Microsoft ASP.NET
2.0
通过客户端回调功能(英文)引入了别开生面的异步回调,并且不久前揭晓(英文)代号为“Atlas”的
AJAX 正在实现中。

术语或者稍糊涂,但是当自家介绍 AJAX
时,就是当介绍起客户端异步调用服务器端函数的总体框架。提到 Ajax.NET
时,我是赖能帮忙而创建以 AJAX 框架的缓解方案的特定实现。

倘询问有关 ASP.NET 2.0 客户端回调功能的详细信息,请看 Bertrand Le
Roy

的博客(英文)。

图片 4归来页首

手头的 AJAX

本文的盈余部分将利用 Ajax.NET 着重介绍三单下 AJAX
功能的出义之以身作则。本指南将富含以 Microsoft C# 和 Microsoft Visual
Basic .NET
编写的代码,有时又提供这点儿栽代码,有时只是提供其中同样种植代码。实现有这通的代码很轻,C#
开发人员能够挺易地按仅盖 Visual Basic .NET
编写的代码,反之亦然!本文包含的演示 C# 和 Visual Basic .NET
种可供应下载,并提供工作代码和运作代码。在上学示例以前,首先得了解怎么设置和动用
Ajax.NET。

Ajax.NET

AJAX.NET
文档(英文)和网站(英文)对开发人员快速入门非常有效。在介绍下是技能的部分切实示例之前,我们用略回顾您所用知道的主导步骤。

首先从 AJAX.NET
路网站(英文)上下载并解压缩
AJAX 文件,然后按照你的爱好好当 Visual Basic .NET 或 C# 中开创新的
ASP.NET 项目,再为 AJAX.dll
文件累加引用(英文)。唯一的附加安排步骤是当
<system.web> 元素中(位于 web.config
文件被)添加以下代码。

<configuration>    
<system.web>  
<httpHandlers>
<!-- Register the ajax handler -->
<add verb="POST,GET" path="ajax/*.ashx" 
type="Ajax.PageHandlerFactory, Ajax" />
</httpHandlers>  
  ...
  ... 
</system.web>
</configuration>

为要劳动器端函数在 JavaScript
中可用,必须开片桩业务。首先,要下的函数必须标注出
Ajax.AjaxMethodAttribute。其次,在页加载事件中,必须经过调用
Ajax.Utility.RegisterTypeForAjax
来注册包含这些函数的类。听起来像有些复杂,但请不要顾虑;实际上只需要在代码中大多加点儿执。让咱看一个示范。

//C#
public class Sample :System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
 {
//注册我们感兴趣的包含服务器端函数
//的类
Ajax.Utility.RegisterTypeForAjax(typeof(Sample));
 }
[Ajax.AjaxMethod()]
public string GetMessageOfTheDay()
 {
return "Experience is the mother of wisdom";
 }
}
'VB.NET
Public Class Sample
Inherits System.Web.UI.Page
Private Sub Page_Load(sender AsObject, e As EventArgs) 
Handles MyBase.Load
'注册我们感兴趣的包含服务器端函数
'的类
Ajax.Utility.RegisterTypeForAjax(GetType(Sample))
End Sub
 <Ajax.AjaxMethod()> _
Public Function GetMessageOfTheDay() As String
Return "Experience is the mother of wisdom"
End Function
End Class

如上示例首先报告 Ajax.NET 在 Sample 类中检索自己之 Ajax
方法。它正好是与实际页相同之近乎,但是她好是自由 .NET
类,或可以挂号多个像样。然后,Ajax.NET 将浏览指定的类,来查找标有
AjaxMethodAttribute 的拥有术,其中 Sample 类有一个
GetMessageOfTheDay

成就后,剩下唯一要举行的就算是于 JavaScript 中应用她。Ajax.NET
自动创建与登记的好像具有同等名称的 JavaScript 变量(在本例中将为
Sample),它提供与 AjaxMethod 具有同等名称的函数(在本例中也
GetMessageOfTheDay)。如下所示。

<script language="javascript">
Sample.GetMessageOfTheDay(GetMessageOfTheDay_CallBack);
function GetMessageOfTheDay_CallBack(response)
 {
alert(response.value);
 }
</script>

除外 JavaScript 回调函数以外,JavaScript GetMessageOfTheDay
还亟需同那服务器端对应部分雷同的参数(在此状下,没有参数),以便在成就时实行并传递响应。在这个,我们来看
AJAX 在工作经常的异步特性,因为对 GetMessageOfTheDay
的调用不遮执行另外 JavaScript
代码,也未挡用户继续在页上进行操作。完成劳动器端处理常,Ajax.NET
调用指定的回调函数
GetMessageOfTheDay_CallBack,并向该传递由服务器端返回值组成的响应。

劳器端代码和 JavaScript 代码之间的照可能稍糊涂。图 1
简要显示了劳动器端代码和 JavaScript 代码,以及两者之间的投射。

图片 5

1:服务器端代码和 JavaScript 代码之间的映照

当令人感兴趣之 Ajax.NET 还有再多内容值得介绍,例如对 .NET
类型的支撑以及添加的回调响应(它不仅是价值)。以下示例将会见要介绍一些功能,希望助您明白
AJAX 如何扶持而创建成功之应用程序。

示例 1:链接的下拉列表

正文的开头简要地谈论了用于链接两独 DropDownList
的一定量种传统办法。当选定的目更改时,返回页;或者以具备可能的数码加载到
JavaScript 数组连动态显示。希望而可看看 AJAX 如何替代这点儿种植缓解方案。

率先,让咱来拘禁一下咱们的数目界面,并由该数据界面驱动示例。我们的数码访问层将提供零星种方法:第一栽办法将检索系统支持之国度/地区的列表,第二种植艺术将沾国家/地区
ID 并回到州/省的列表。由于这是彻头彻尾数据看,因此我们无非待利用办法。

//C#
public static DataTable GetShippingCountries();
public static DataView GetCountryStates(int countryId);
'VB.NET
Public Shared Function GetShippingCountries() As DataTable
Public Shared Function GetCountryStates(ByVal countryId As Integer)
As DataView

今,让咱们反至彼此反面,创建简单的 Web 窗体。

<asp:DropDownList ID="countries" Runat="server" />
<asp:DropDownList ID="states" Runat="server" />
<asp:Button ID="submit" Runat="server" Text="Submit" />

Page_Load 事件相同略,和前述的 Web
窗体一样。我们采用数据看层来搜寻可用的国/地区,并将那绑定到
countriesDropDownList 中。

//C#
if (!Page.IsPostBack)
{
countries.DataSource = DAL.GetShippingCountries();
countries.DataTextField = "Country";
countries.DataValueField = "Id";
countries.DataBind();
countries.Items.Insert(0, new ListItem("Please Select", "0"));
}

平常,代码到这结束。首先,我们将开创而由 JavaScript 调用的劳务器端函数。

'VB.NET
<Ajax.AjaxMethod()> _
Public Function GetStates (ByVal countryId As Integer) As DataView
Return DAL.GetCountryStates(countryId)
End Function

旋即跟你便使用的另外其它函数一样:它需要我们怀念要博取的国/地区的
ID,并将拖欠要传递让 DAL。唯一的例外是我们就使用 AjaxMethodAttribute
标记了拖欠办法。最后剩余的劳动器端步骤是经调用 RegisterTypeForAjax
使用 Ajax.NET 来注册包含上述方法的类似(在这个景下,是咱的底的代码)。

//C#
Ajax.Utility.RegisterTypeForAjax(typeof(Sample));
'VB.NET
Ajax.Utility.RegisterTypeForAjax(GetType(Sample))

咱们曾基本完成;剩余的便是自 JavaScript 调用 GetStates
方法及拍卖应。当用户从国/地区列表中选取新项时,我们怀念当逻辑上调用
GetStates。为这个,我们将触及 JavaScript onChange
事件。这样就是有点更改了我们的 Web 窗体代码。

<asp:DropDownList onChange="LoadStates(this)" 
ID="countries" Runat="server" />

JavaScript LoadStates 函数将承受通过由 Ajax.NET
创建的代办发出异步请求。请牢记,默认情况下,Ajax.NET 创建的代办的格式为
<RegisteredTypeName>.<ServerSideMethodName>。在咱们的演示中,将为
Sample.GetStates。我们尚想传入国家/地区 ID 参数和形成劳动器端函数后
Ajax.NET 应调用的回调函数。

//JavaScript
function LoadStates(countries)
{
var countryId = countries.options[countries.selectedIndex].value;
Sample.GetStates(countryId, LoadStates_CallBack);
}

末尾一个步骤是处理我们的 LoadStates_CallBack 函数惨遭之应。Ajax.NET
最有效的法力大概是它支持广大 .NET
类型(我早就三番五次干这一点)。回顾一下赶回 DataView
的劳动端函数。JavaScript 知道 DataView 什么?什么吗无知道,但是
JavaScript 是面向对象的言语,而且 Ajax.NET 不只会创造及 .NET
DataView 相似的对象,还能够用欠函数返回的值映射到 JavaScript
副本。您当牢记 JavaScript DataView 只不过是实在 DataView
的副本,目前除外会百分之百历行和做客列值以外不支持其他还多职能(例如设置
RowFilter 或 Sort 属性的意义)。

function LoadStates_CallBack(response)
{
//如果服务器端代码出现异常
if (response.error != null)
 {
//我们应该能做得更好
alert(response.error); 
return;
 }
var states = response.value;
//如果不是我们所希望的响应
if (states == null || typeof(states) != "object")
 {
return;
 }
//获得州下拉列表
var statesList = document.getElementById("states");
statesList.options.length = 0; //重置州下拉列表
//记住,其长度不是 JavaScript 中的 Length
for (var i = 0; i < states.length; ++i)
 {
//如命名属性一样公开行的列
statesList.options[statesList.options.length] =
new Option(states[i].State, states[i].Id);
 }
}

通过一些左检查下,前面的 JavaScript
获得州下拉列表,遍历响应的值,并动态地用选取添加到拖欠下拉列表中。代码清晰、简单并跟
C# 和 Visual Basic .NET
非常相似。就自我个人而言(作为基于服务器端变量创建了 JavaScript
数组并将她链接以同步的开发人员),我还要一段时间才会相信她真的起作用了。

发生一个或者不绝明了的关键问题。由于 DropDownList 是在 JavaScript
中动态创建的,因此她的宗非属于
ViewState,并且不为保护。这象征按钮的 OnClick
事件处理程序用展开有外加的修改。

'VB.NET
Private Sub submit_Click(sender As Object, e As EventArgs)
Dim selectedStateId As String = Request.Form(states.UniqueID)
'应进行一些用户验证...
states.DataSource =
DAL.GetCountryStates(Convert.ToInt32(countries.SelectedIndex))
states.DataTextField = "State"
states.DataValueField = "Id"
states.DataBind()
states.SelectedIndex = 
states.Items.IndexOf(states.Items.FindByValue(selectedStateId))
End Sub

先是,我们无克运用 states.SelectedValue 属性,而要下
Request.Form。其次,如果我们想朝着用户还显示该列表,需要还使用同样之多少看方法绑定州
DropDownList。最后,必须盖编程方式设置选定的价。

示例 2:文档锁定程序

于生一个演示,我们将引入更加完整的成效,然后以 AJAX
改进其。此示例属于简单的文档管理体系。如另正式的文档管理体系一样,我们须提供并发管理。即,我们用一致种艺术来处理两个用户尝试编辑和一个文档的题材。我们用通过创办某种类型的锁定机制,来使正在编制的文档不能够更由其他一个用户编辑,从而达成上述目的。我们拿利用
AJAX
让用户有再愉悦的锁定机制体验。首先,我们以开创用户尝试编辑而无能为力编辑(因为其他用户正在编纂该文档)的文档队列,当这些文档可用时自动通知用户。其次,我们以保险当用户关闭其浏览器还是导航及另外位置时,解除针对文档的锁定。后一个效应帮助确保文档不会见永远地处锁定状态。为者,在本指南中,我们用超了跟
AJAX 实现不相干的功能;但是,可生充斥项目涵盖有力量。

先是,当用户尝试编辑文档时,我们见面尝试对那个建立排它锁,如果失败,我们见面拿此文档添加到用户之序列然后如该返回到主页。对这边的
AJAX
没有什么特别之处,但是我们拿翻开转代码,以便为出示例必要的上下文。在用于编辑的
PageOnLoad 事件中,添加以下代码。

//C#
if (!Page.IsPostBack)
{
//应验证用户输入
Document document = GetDocument(Request.QueryString["id"]);
//我们拥有此文档,但不能编辑它!
if (!Locker.AcquireLock(document))
 {
//让我们将它添加到要查看的用户文档列表
User.CurrentUser.AddDocumentToQueue(document.DocumentId);
Response.Redirect("DocumentList.aspx");
 }
//好了,我们拥有此文档,并且可以编辑它
 //...
}

一言九鼎行之岗位是以文档添加到即用户的阵中(这会将文档添加到话中)。接下来,我们将创用户控件,该控件可以叫停放到外页上,用于当排文档可用时通用户。此用户控件将富含一个
AJAX 方法以及注册 AJAX 的好像所需要的代码。

'VB.NET
Private Sub Page_Load(s As Object, e As EventArgs) 
Handles MyBase.Load
Ajax.Utility.RegisterTypeForAjax(GetType(UnlockNotifier))
End Sub
'遍历队列文档并检查它们是否可用
<Ajax.AjaxMethod()> _
Public Function GetUnlockedDocuments() As DocumentCollection
'获得属于用户的所有队列文档的 ID
Dim queuedDocument As ArrayList = User.CurrentUser.DocumentQueue
Dim unlocked As DocumentCollection = New DocumentCollection
For Each documentId As Integer In queuedDocumentIds
'如果队列文档不再被锁定
If Not Locker.IsLocked(documentId) Then
unlocked.Add(Document.GetDocumentById(documentId))
End If
Next
Return unlockedDocuments
End Function

本待的是如果部分 JavaScript
发出请求并处理应。我们以根据响应在苟动态创建的表中放置已发布之文档信息(如果生)。为这个,我们将开修
HTML。

<div id="notifyBox" style="display:none;">
<b>The following queued documents can now be edited</b>
<table cellpadding="5" cellspacing="0"
border="0" style="border:1px solid #EEE;"
id="notifyTable">
</table>
</div>

如果无可用之文档(或是没有啊该用户列出文档),我们采取 DIV
标记隐藏所有内容,用 TABLE
标记来显示结果。我们以以轮询系统来检查是否留存任何可用的队列文档。一般的话,这表示我们将以稍后一段时间内直调用服务器端方法,并显示结果。在加载页面时仅发生第一赖调用,每隔
X 秒发生连续调用。

<script language="javascript">
window.setTimeout("PollQueue();", 2000);
//每隔 2 秒激发以检查在具有许多用户的实际系统中是否发布了
//队列文档,2 秒可能会使服务器承受
//过高的负荷。我们甚至可以首先检查用户是否
//拥有队列,但是我们确实需要进行一些
//性能测试
function PollQueue()
{
//UnlockNotifier 是我们使用 Ajax.NET 注册的类型
//GetUnlockedDocuments 是该类型中的方法,标有
//AjaxMethod 属性
UnlockNotifier.GetUnlockedDocuments(PollQueue_CallBack);
//每隔 2 秒调用其本身
window.setTimeout("PollQueue();", 2000);
}
</script>

剩余的虽是处理应。这和以前示例中之代码相似。首先,检查是不是有错误,获得响应,遍历可用之文档,动态创建
HTML,在这种情景下,向表中补充加行和排。

function PollQueue_CallBack(response)
{
var notifyBox = document.getElementById("notifyBox");
var notifyTable = document.getElementById("notifyTable");
//如果我们无法找到表通知框
if (notifyBox == null || notifyTable == null)
  {
return;
  }
//如果服务器端代码出现异常
if (response.error != null)
  { 
notifyBox.style.display = "none"; 
alert(response.error); //我们应该能做得更好
return;
  }  
var documents = response.value;
//如果不是我们所希望的响应
if (documents == null || typeof(documents) != "object")
  {
notifyBox.style.display = "none";
return;
  }  
for (var i = 0; i < notifyTable.rows.length; ++i)
  {
notifyTable.deleteRow(i);
  }
for(var i = 0; i < documents.length; ++i)
  {    
var row = notifyTable.insertRow(0);
row.className = "Row" + i%2;
var cell = row.insertCell(0);
cell.innerHTML = documents[i].Title;
cell = row.insertCell(1);
var date = documents[i].Created;
cell.innerHTML = date.getDay() + "/" + date.getMonth() 
+ "/" + date.getYear();
cell = row.insertCell(2);
cell.innerHTML = "<a href='DocumentEdit.aspx?id=" 
+ documents[i].DocumentId + "'>edit</a>";
  } 
notifyBox.style.display = "block";
}

咱们只要察看底末段一个火速改进是当用户关闭浏览器、导航及其他链接或者单击“后退”按钮时,将机关清除文档锁定。通常,可以透过接触
JavaScript OnBeforeUnLoad 事件或 OnUnload
事件达到这个目的,这会打开新的小型弹出式窗口,该弹出式窗口于加载页面时举行片清理然后自动关闭。您自己好采用弹出式窗口,但是其他人则未克应用,它用造成弹出式窗口受阻并设文档永久保持锁定状态。要解决这个题材,我们按欲简单单
JavaScript 事件,但是连无是启动弹出式窗口,而是以由此 AJAX
执行服务器端方法。在用于编辑文档的页上(即,放置锁之页),我们抬高一些简单的
JavaScript。

<script language="javascript">
//如果用户关闭浏览器或点击“后退”按钮,
//确保该文档会被解除锁定
window.onbeforeunload = ReleaseLock;
function ReleaseLock() {
Locker.ReleaseDocument(<%=DocumentID%>);
}
</script>

在这里,DocumentId
是在后边的代码中定义及安装的变量。另外,我们得以在对话中储存
DocumentId,并于服务器端 ReleaseDocument
中访问。通常,ReleaseDocument 从锁定的文档列表中剔除文档。

示例 3:论坛主题搜索

咱设扣押的结尾一个示范是针对性现有应用程序的改。我首次于听到这个想法是
Josh
Ledgard
(英文)设想在
MSDN
论坛(英文)里补充加一个功效。目的是品帮用户自己找到问题的答案,以及限制重复发表之多少。一般的话,用户以论坛受到提出新题材常常,他要其会客输入主题和题材。他们常备还不会见先行进行搜,来查是否业已提出与答复了该问题。输入
AJAX。用户输入主题(并拿 Tab
键移出拖欠字段)后,我们根据该主题异步搜索论坛,并及时地于用户展示结果。有时这些结果会发帮带,有时候则不会见。

否要结果发生协助,我们以改 asp.NETPRO Reader’s Choice Award for Best
Forum Application,
CommunityServer。可下载的言传身教中未包含这同一片段(或论坛)的代码,但是若能在
http://communityserver.org/(英文)学到关于
CommunityServer 的再次多知识,并且可每当中间以下面这些代码片断。

安 CommunityServer 并配备 Ajax.NET(已拿引用和处理程序添加到
web.config)后,我们只需要进行部分改动就足以获所要的功力。首先,我们反到
CommunityServerForums 项目蒙之 CreateEditPost.cs
文件。将她视为此页的后的代码,其中用户可以填补加新的揭示。下面我们以长启用了
AJAX 的函数。

//C#
[Ajax.AjaxMethod()]
public static ArrayList Search(string search)
{
SearchQuery query = new SearchQuery();
query.PageIndex = 0; //获得前 10 个结果
query.PageSize = 10;
query.UserID = Users.GetUser().UserID;
query.SearchTerms = search;
return new ForumSearch().GetSearchResults(query).Posts;
}

我们会使就以 CommunityServer
中创造的查找功能,只需要我们的函数能运用它。如既往一样,类型必须用
Ajax.NET 注册。我们将在相同文件的 InitializeSkin 函数(将那视为
Page_Load)中进行这个操作。

//C#
Ajax.Utility.RegisterTypeForAjax(typeof(CreateEditPost));

在转跳到 JavaScript 之前,我们要进行最后之劳动器端更改。返回到
Ajax.NET 的自定义类(例如我们在返回的 ArrayList 所蕴含的
ForumPost)必须标注出 Serializable 属性。我们要开的凡改至
CommunityServerForums 项目蒙之 Components/ForumPost.cs
文件,并上加此属性。

//C#
[Serializable]
public class ForumPost :Post
{
 ...
}

亮时,我们唯有用修改 CommunityServerWeb 项目被之
Themes/default/Skins/View-EditCreatePost.cs。首先,我们以触发主题文本框的
onBlur 事件。

<asp:textbox onBlur="Search(this.value);"
id="PostSubject" runat="server" ... />

进而,我们编辑 JavaScript Search 方法,以便调用服务器端 Search

var oldValue = '';
function Search(value)
{ 
//不要再次搜索刚搜索过的内容
//如果用户向后或向前移动 Tab 键将会发生
if (value != oldValue)
  {
CreateEditPost.Search(value, Search_CallBack);
oldValue = value;
  }
}

终极,剩下的就是处理应。由于达一个示范介绍了以说明中形结果的有点正规的计,我们用单纯创建有动态的
HTML,并以其粘贴到虚拟的 DIV 中。

function Search_CallBack(response)
{
//由于没有结果时搜索功能将自动重定向,
//因此,我们不能使用 response.error。
var results = response.value;
//如果我们没有获得结果
if (results == null)
 {
return;
 }
//我们用于放置结果的 DIV
var someDiv = document.getElementById("someDiv");
var html = "";
for (var i = 0; i < results.length; ++i)
 {
var result = results[i];
html += "<a target=_blank href='" + result.PostID
html += "/ShowPost.aspx'>";   
html += result.Subject;
html += "</a><br />"
 }
someDiv.innerHTML = html;
}

经过对 CommunityServer 应用程序的老三独公文(加上用于配置的
web.config)稍微进行修改,我们好增长一些非常实用之功能。但是,只为现有的应用程序添加启用
AJAX 功能时如小心操作。正在开展实际搜索的先行在的 ForumSearch
类可能并无是吗咱介绍的用项目设计的。我们的代码很可能会见招执行有附加的探寻,影响恐怕会见怪肯定。

图片 6返页首

AJAX 与您

AJAX
如何跟乌适合您的应用程序,以及是否业已有而因事态只要迟早。尽管我们早已看使用
Ajax.NET 可以轻松地开创启用 AJAX
的解决方案,但还存在有旁的注意事项。一个要着重关注之题材是针对你的应用程序的共同体系统布局与可维护性的熏陶。AJAX
会进一步搅乱系统的各层之间的边,显著影响显示层、显示逻辑层和业务层。这不是
AJAX
本身的问题,而是使方式的题材。只要你明白其那个轻招各层之间的某些冲突,并适当操作,就不会见有问题。

动 AJAX 的应用程序更难以让保护为?答案主要取决于你都以的 JavaScript
的数目,以及你组织和掩护其的高低程度。很多开发人员认为 JavaScript
难给编写、测试与调剂(不是坐 JavaScript
本身,而是坐工具支持及开发人员的知识)。如果您当前正值下 JavaScript
实现链接的下拉列表,并切换至 AJAX,您的代码可能较为容易保障(Ajax.NET 对
.NET
类型和反复组的支撑是必不可缺原由)。但是,如果你使用返回方式来兑现,现在您将通往而的应用程序
(JavaScript) 引入崭新的语言。您将必须处理这样的事态:存在一些不介入
ViewState 的数目(这无异沾我们当按钮单击事件备受得看来)。

任何一个要考虑的是 AJAX 对君的网站可用性的熏陶。即使 AJAX
最后会创造响应更及时的界面,开发人员仍要小心少件工作。首先,很肯定
AJAX 依赖 JavaScript。我们且知有些用户禁用
JavaScript,一些业内(例如加拿大政府 Common Look and Feel [设想加拿大之
508])要求网站采取 JavaScript
来运转,或未采用它们来运行。因此,您不答应设 AJAX 功能在运行。如果 AJAX
功能不可用,则答应要你的应用程序退回到重常见的 Web 处理。其次,AJAX
应用程序可能未熟识(即使她有比高级别)用户习惯用应用程序的措施。例如,通过
AJAX
执行不一作用的页可能不因为用户觉得的不二法门表现“后退”按钮、“收藏夹”菜单和其余浏览器功能。

图片 7回去页首

结论

AJAX 不一味是令人兴奋的即将出现的艺,它是切实可行的框架,在成立 Web
应用程序时得利用它来解决每天遇到的题材。Ajax.NET 使 ASP.NET
开发人员轻松掌握
AJAX。我们看到底老三只示范和可下载的门类可以帮你了解哪些用 AJAX 和
Ajax.NET。您还足以以这些示例来品尝一些要好之想法。AJAX
不仅可创造简洁和强硬的应用程序,它还可使您提高客户满意度和竞争优势。正于议论的
Atlas
的片高级概念可能显著改善我们提供的活。就个人而言,我表现了之顶尖的
AJAX
实现深便于饶合适。您自己的兑现应为卿的用户提供平等积极的体会。但是,对于有具体问题,记住
AJAX 可能无是唯一的缓解方案,也说不定不是超级的化解方案。现在,让咱们证实
ASP.NET 社区是卓越的,让咱们办屋子吧。

有关作者

Karl Seguin 将他的绝大多数工夫之所以当 Microsoft ASP.NET
新闻组,帮助任何开发人员并招来和编帮助性的主题。当他未坐班或者非提供支援时,他好无情地净化
Gnomish 灾难的 Azeroth。

原文:http://www.microsoft.com/china/msdn/library/webservices/asp.net/ASPNetSpicedAjax.mspx

相关文章

网站地图xml地图