C语言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
语言)

C语言 1

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

简介

自从发轫 Web 编制程序以来,在 Web
应用程序和桌面应用程序之间直接存在着很多精选。例如,人们司空见惯认为 Web
应用程序提供的用户界面类型没有桌面应用程序提供的用户界面类型那样丰盛。另一方面,Web
应用程序是单独的平台,其付出机制相比简单。提供响应更及时的应用程序看似是一项简单的职务,但对于
Web 开发职员来说却是平素以来须要攻克的小圈子。

守旧意义上,只可以通过向 Web
服务器交由新的呼吁来查找对用户输入所做的响应。在一些情形下,开发职员能够动用
JavaScript
在客户端上加载全体响应,从而提供更好的用户体验。此技能的常见示例是基于所选国家/地区来动态加载一种类州或省。遗憾的是,在重重情景下,不将装有响应都回到或加载到
JavaScript 要更好。再次回到操作会使过多的 UI
断开连接,或在客户端上急需过量的多少,那常常导致生成不易读的
JavaScript。AJAX
提供了一种新的中游选拔,能够在保障及时响应和灵活性的同时使用基于服务器的应用程序。

C语言 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,那八个应用程序的响应会使你有点喜悦。

C语言 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

的博客
(英文)。

C语言 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
来注册包罗这么些函数的类。听起来就好像不怎么复杂,但请不必担心;实际上只要求在代码中多加两行。让我们看1个示范。

//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 的装有办法,个中 萨姆ple 类有二个
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 代码,以及两者之间的映照。

C语言 5

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

自然令人感兴趣的 Ajax.NET 还有越来越多内容值得介绍,例如对 .NET
类型的帮助和增进的回调响应(它不光是值)。以下示例将会重点介绍一些效用,希望帮忙你明白AJAX 怎么着援助您成立成功的应用程序。

示例 1:链接的下拉列表

本文的开始简要地切磋了用来链接多少个 DropDownList
的两种传统格局。当选定的目录更改时,再次回到页;或然将全体大概的数额加载到
JavaScript 数组并动态显示。希望您能够看看 AJAX 怎么样替代那三种缓解方案。

先是,让我们来看一下大家的数据界面,并从该数额界面驱动示例。我们的数目访问层将提供二种艺术:第2种艺术将检索系统支持的国度/地区的列表,第三种方法将获取国家/地区
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
类型(小编一度数10遍关联那或多或少)。回看一下重回 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
数组并将它们链接在联合署名的开发职员),小编还要一段时间才能相信它确实起效用了。

C语言,有三个可能不太强烈的主要难点。由于 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:文书档案锁定程序

对此下1个示范,大家将引入尤其完整的功效,然后使用 AJAX
创新它。此示例属于简单的文书档案管理种类。如别的正式的文档管理种类一样,大家务必提供并发管理。即,我们需求一种艺术来处理多个用户尝试编辑同二个文书档案的难点。大家将通过创制某类别型的锁定机制,来使正在编纂的文书档案无法再由另1个用户编辑,从而达到上述目标。大家将使用
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:论坛宗旨搜索

大家要看的最后2个示范是对现有应用程序的修改。作者第三回听到这么些想法是
Josh
Ledgard
(英文)设想在
MSDN
论坛
(英文)里添加七个效能。指标是尝试帮助用户自身找到难点的答案,以及限制重复公布的数据。一般的话,用户在论坛中提议新题材时,他或她会输入主旨和题材。他们一般都不会先举行检索,来查看是或不是已经建议和回复过该问题。输入
AJAX。用户输入大旨(并将 Tab
键移出该字段)后,我们依据该大旨异步搜索论坛,并适时地向用户浮现结果。有时那些结果会有救助,有时候则不会。

为使结果有支持,大家将修改 asp.NETPRO Reader’s Choice Award for BestForum 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
类恐怕并不是为我们介绍的利用项目设计的。大家的代码很可能会造成执行一些外加的追寻,影响只怕会很举世瞩目。

C语言 6回去页首

AJAX 与您

AJAX
怎样以及哪里适合你的应用程序,以及是还是不是早已存在要依照情形而定。尽管大家已经看到接纳Ajax.NET 能够轻松地创制启用 AJAX
的消除方案,但还留存有的任何的注意事项。三个索要重点关心的难点是对你的应用程序的共同种类统布局和可维护性的影响。AJAX
会进一步搅乱系统的各层之间的无尽,显著影响突显层、显示逻辑层和业务层。那不是
AJAX
自己的题材,而是使用方法的题目。只要您知道它很简单导致各层之间的一些争持,并适度操作,就不会生出难点。

行使 AJAX 的应用程序更难于保护吗?答案首要在于你曾经使用的 JavaScript
的数码,以及你组织和保证它的高低程度。很多开发职员认为 JavaScript
难于编写、测试和调节和测试(不是因为 JavaScript
本身,而是因为工具协理和开发人士的文化)。假设您当前正在选取 JavaScript
达成链接的下拉列表,并切换来 AJAX,您的代码只怕相比容易保障(Ajax.NET 对
.NET
类型和数组的支撑是关键原由)。可是,尽管你使用重回格局来促成,今后您将向您的应用程序
(JavaScript) 引入崭新的语言。您将必须处理那样的景况:存在有个别不加入
ViewState 的数据(那一点我们在按钮单击事件中得以见到)。

另2个亟待考虑的是 AJAX 对您的网站可用性的震慑。固然 AJAX
最终能创制响应更及时的界面,开发职员仍亟需专注两件业务。首先,很强烈
AJAX 信赖 JavaScript。大家都晓得有些用户禁用JavaScript,一些标准(例如加拿大政党 Common Look and Feel [考虑加拿大的
508])必要网站采取 JavaScript
来运维,或不利用它来运作。因而,您不应假定 AJAX 效能正在运转。若是 AJAX
效率不可用,则应使你的应用程序退回到更常见的 Web 处理。其次,AJAX
应用程序大概不熟悉(纵然它有着较高级别)用户习惯使用应用程序的艺术。例如,通过
AJAX
执行差别效用的页恐怕不以用户觉得的情势表现“后退”按钮、“收藏夹”菜单和其余浏览器功效。

C语言 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