AjaxASP.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
语言)

Ajax 1

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

简介

从今开头 Web 编程以来,在 Web
应用程序和桌面应用程序之间一向留存着广大挑选。例如,人们见惯不惊认为 Web
应用程序提供的用户界面类型没有桌面应用程序提供的用户界面类型那样丰裕。另一方面,Web
应用程序是单身的平台,其开发机制比较简单。提供响应更及时的应用程序看似是一项简单的任务,但对于
Web 开发人士来说却是一贯以来要求攻克的小圈子。

传统意义上,只可以通过向 Web
服务器交由新的伸手来探寻对用户输入所做的响应。在某些意况下,开发人士可以运用
JavaScript
在客户端上加载所有响应,从而提供更好的用户体验。此技术的大面积示例是按照所选国家/地区来动态加载一系列州或省。遗憾的是,在诸多气象下,不将具有响应都回到或加载到
JavaScript 要更好。重临操作会使过多的 UI
断开连接,或在客户端上急需过量的数据,那平时导致生成不易读的
JavaScript。AJAX
提供了一种新的中间接纳,可以在有限接济及时响应和灵活性的还要使用基于服务器的应用程序。

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
Suggests
(英文)和
Google Maps(英文)。如若你不熟识AJAX,那八个应用程序的响应会使你有点欢欣。

Ajax 3归来页首

用于 ASP.NET 的 AJAX

成百上千因素促使 AJAX 应运而生。您或许不想开支几个钟头或几天来精晓 AJAX
的内部原理,而是更希望今日就初叶创建启用了 AJAX
的应用程序,来满意现有须要(借使你确实想清楚 AJAX
内部工作原理,我一定不是足以了解的人)。开发人士可以用来飞快入门的工具有不少。不过我们将尤其关注由
迈克尔 Schwarz 编写的源代码开放的免费 Ajax.NET。Ajax.NET
考虑到所有的落到实处细节是基于 .NET 的,并且可以被伸张。Microsoft ASP.NET
2.0
通过客户端回调功效(英文)引入了独具特色的异步回调,并且日前宣布(英文)代号为“Atlas”的
AJAX 正在贯彻中。

术语或者有些凌乱,不过当我介绍 AJAX
时,就是在介绍从客户端异步调用服务器端函数的一体化框架。提到 Ajax.NET
时,我是指可以接济您成立利用 AJAX 框架的解决方案的特定达成。

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

的博客
(英文)。

Ajax 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 在 萨姆ple 类中搜索自己的 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 代码,以及两者之间的照耀。

Ajax 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
类可能并不是为大家介绍的采纳项目设计的。大家的代码很可能会招致执行一些附加的搜寻,影响可能会很精晓。

Ajax 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
执行不一功用的页可能不以用户觉得的办法突显“后退”按钮、“收藏夹”菜单和任何浏览器成效。

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

相关文章