ASP.NET 调味品:AJAX

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

相关文章