图片 1

简介

从今儿晚上先 Web 编制程序以来,在 Web
应用程序和桌面应用程序之间向来存在着累累挑选。例如,人们家常便饭以为 Web
应用程序提供的用户分界面类型未有桌面应用程序提供的用户分界面类型这样丰富。另一方面,Web
应用程序是单身的平台,其开垦机制相比较轻便。提供响应更及时的应用程序看似是一项轻便的天职,但对于
Web 开荒职员来讲却是平素以来须要侵占的小圈子。

古板意义上,只可以通过向 Web
服务器交由新的伸手来索求对用户输入所做的响应。在有些处境下,开辟职员能够运用
JavaScript
在客户端上加载全体响应,从而提供越来越好的用户体验。此本领的广大示例是依照所选国家/地区来动态加载一体系州或省。遗憾的是,在广大景况下,不将具备响应都回到或加载到
JavaScript 要越来越好。重返操作会使过多的 UI
断开连接,或在客户端上急需过量的数目,那平时导致生成不易读的
JavaScript。AJAX
提供了壹种新的中游选拔,能够在维持及时响应和灵活性的同时接纳基于服务器的应用程序。

图片 2回来页首

结论

AJAX 不只是令人欢腾的将要出现的能力,它是切实可行的框架,在建立 Web
应用程序时可以选用它来消除天天境遇的标题。Ajax.NET 使 ASP.NET
开辟人士轻易明白AJAX。我们看看的三个示范和可下载的体系得以帮忙您领会哪些运用 AJAX 和
Ajax.NET。您还能运用那个示例来尝试1些温馨的想法。AJAX
不仅能够成立简洁和强硬的应用程序,它还足以使您进步客户满足度和竞争优势。正在议论的
Atlas
的有些高等概念恐怕显然革新大家提供的成品。就个人来讲,笔者见过的极品的
AJAX
完成丰硕轻松合适。您自身的兑现应为您的用户提供平等积极的心得。可是,对于有些具体难点,记住
AJAX 恐怕不是唯1的缓解方案,也大概不是极品的化解方案。未来,让大家证实
ASP.NET 社区是典型的,让大家收十屋子吧。

至于作者

Karl Seguin 将她的绝大许多时间用在 Microsoft ASP.NET
新闻组,帮忙其余开荒人士并招来和编写制定扶助性的主旨。当他不工作或不提供赞助时,他喜欢严酷地清洁
Gnomish 磨难的 Azeroth。

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

AJAX 与您

AJAX
如何以及何地适合您的应用程序,以及是或不是曾经存在要根据事态而定。就算大家早就看到选拔Ajax.NET 能够轻巧地开创启用 AJAX
的消除方案,但还存在有的其它的注意事项。三个索要注重关心的难题是对你的应用程序的共同连串统布局和可维护性的影响。AJAX
会进一步搅乱系统的各层之间的尽头,鲜明影响展现层、显示逻辑层和业务层。那不是
AJAX
本人的难点,而是接纳方法的题材。只要你领略它很轻松产生各层之间的有个别争持,并适当操作,就不会发出难题。

行使 AJAX 的应用程序更难于尊崇吗?答案主要在于你曾经选用的 JavaScript
的多寡,以及你协会和保护它的好坏程度。诸多开垦职员以为 JavaScript
难于编写、测试和调整(不是因为 JavaScript
本人,而是因为工具支持和开垦职员的文化)。要是您当前正在利用 JavaScript
完毕链接的下拉列表,并切换来 AJAX,您的代码只怕较为轻松保险(Ajax.NET 对
.NET
类型和数组的接济是关键原由)。不过,要是你使用重回方式来兑现,以往您将向您的应用程序
(JavaScript) 引进斩新的语言。您将必须处理那样的情事:存在某个不出席
ViewState 的数额(那点大家在开关单击事件中得以看来)。

另二个内需思量的是 AJAX 对你的网址可用性的熏陶。固然 AJAX
最后能创立响应更及时的分界面,开荒人士仍急需小心两件工作。首先,很显著AJAX 依赖 JavaScript。我们都清楚有些用户禁用JavaScript,1些正规(例如加拿大政坛 Common Look and Feel [想念加拿大的
50八])要求网址使用 JavaScript
来运营,或不选取它来运作。因而,您不应假定 AJAX 作用正在运作。假若 AJAX
效用不可用,则应使您的应用程序退回到更平凡的 Web 处理。其次,AJAX
应用程序只怕不纯熟(固然它抱有较高等别)用户习惯使用应用程序的不二等秘书诀。例如,通过
AJAX
实践不一功效的页恐怕不以用户以为的方法表现“后退”按键、“收藏夹”菜单和其它浏览器功用。

图片 3回来页首

用于 ASP.NET 的 AJAX

过多要素促使 AJAX 应运而生。您可能不想费用多少个小时或几天来询问 AJAX
的内部原理,而是更愿意明天就起来创办启用了 AJAX
的应用程序,来满意现成要求(尽管您确实想精通 AJAX
内部工作规律,小编必然不是足以了然的人)。开辟人士能够用来极快入门的工具备无数。可是我们将专门关注由
迈克尔 Schwarz 编写的源代码开放的无需付费 Ajax.NET。Ajax.NET
思量到独具的落到实处细节是基于 .NET 的,并且能够被扩张。Microsoft ASP.NET
二.0
通过客户端回调作用(英文)引进了独具匠心的异步回调,并且如今公布(英文)代号为“Atlas”的
AJAX 正在落到实处中。

术语可能有点糊涂,可是当作者介绍 AJAX
时,便是在介绍从客户端异步调用服务器端函数的完全框架。提到 Ajax.NET
时,我是指能够帮忙你创制利用 AJAX 框架的解决方案的一定完成。

要通晓关于 ASP.NET 二.0 客户端回调效率的详细消息,请访问 Bertrand Le
Roy

的博客
(英文)。

图片 4回到页首

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

手头的 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
文件累加引用(英文)。唯1的附加布置步骤是在
<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 代码之间的酷炫也许有个别凌乱。图 一简要呈现了劳动器端代码和 JavaScript 代码,以及两者之间的投射。

图片 5

一:服务器端代码和 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。唯1的比不上是大家已运用 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
数组并将它们链接在1块儿的开垦职员),笔者还要1段时间才干相信它的确起功能了。

有一个恐怕不太明朗的基本点问题。由于 DropDownList 是在 JavaScript
中动态成立的,由此它的项不属于
ViewState,并且不被保险。那意味着开关的 OnClick
事件处理程序要求张开1些额外的退换。

'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
创新它。此示例属于轻松的文书档案管理种类。如别的专业的文档管理种类同样,大家无法不提供并发管理。即,我们须求1种格局来拍卖三个用户尝试编辑同叁个文书档案的主题素材。大家将经过创设某种类型的锁定机制,来使正在编写的文书档案无法再由另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
标志来展现结果。我们将运用轮询系统来检查是或不是存在别的可用的种类文书档案。1般的话,那意味大家将要稍后一段时间内一贯调用服务器端方法,并展现结果。在加载页面时仅爆发第一次调用,每隔
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:论坛主旨搜索

大家要看的最后1个演示是对现存应用程序的修改。作者第1次听到那么些想法是
Josh
Ledgard
(英文)设想在
MSDN
论坛
(英文)里增添1个功能。指标是尝尝帮忙用户自身找到标题标答案,以及限制重复公布的数据。一般的话,用户在论坛中建议新主题素材时,他或她会输入主旨和主题素材。他们平凡都不会先实行检索,来查阅是不是已经建议和应对过该难题。输入
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
类恐怕并不是为大家介绍的接纳项目设计的。大家的代码相当的大概会导致实行1些附加的查找,影响或然会很引人侧目。

图片 6回来页首

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

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

Karl Seguin

摘要:打听怎么将 AJAX(异步 JavaScript 和 XML)用于您的 Microsoft
ASP.NET 应用程序,使其互动性越来越强、响应更及时。

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

什么是 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,这么些应用程序的响应会使您有点欢乐。

图片 7归来页首

相关文章

网站地图xml地图