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
来注册包含这些函数的类。听起来如不怎么复杂,但请不要担心;实际上只需要在代码中多加点儿推行。让咱们看一个示范。

//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 代码,以及两者之间的投射。

C语言 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
类可能并无是吗我们介绍的利用类设计之。我们的代码很可能会见招执行有额外的搜寻,影响或会见死明白。

C语言 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
执行不一功能的页可能未为用户认为的法门呈现“后退”按钮、“收藏夹”菜单和其他浏览器功能。

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