首页 / 脚本样式 / Ajax / 探讨ASP.NET MVC框架内置AJAX支持编程技术
探讨ASP.NET MVC框架内置AJAX支持编程技术2010-12-02 IT168 朱先忠传统型ASP.NET Web Forms是基于同时包含了表现层和后台代码的Web页面, 所以,紧随其后出现的ASP.NET AJAX,特别是这个框架的服务器端控件并没有像 它们本应该的那样光芒四射。于是,很多跟随AJAX时髦的ASP.NET开发者只是向 ASP.NET页面中随意地放置一些UpdatePanel控件以便使其程序实现基本的AJAX支 持。实际上,这只是防止了页面的“闪烁”,而根本上页面还是进行 了完整的回发,并且要经历整个页面的生存周期。为了消除ASP.NET Web Forms 所依赖的页面回寄和ViewState等复杂技术,微软又推出了ASP.NET应用开发的另 一个可选框架—ASP.NET MVC。也正是基于前面的分析,ASP.NET MVC中也 加入了部分AJAX支持技术。但是,目前的ASP.NET MVC框架尚未发布其正式发行 版本,在许多方面仍存在不完善的地方,尤其是对于AJAX技术仅提供了有限的支 持。本文中,我们将通过一个简单的例子来讨论如何借助于ASP.NET MVC Preview 4框架提供的Ajax.Form方法实现基本的AJAX编程支持。一、引 言如果你详细研究一下ASP.NET MVC框架每个版本之间的变化信息有关资 源,那么你会注意到新版本的框架中提供了一组新对象,例如AjaxHelper和 AjaxExtensions。借助于这些对象,你可以为你的ASP.NET MVC应用程序添加流 行的Ajax支持功能。此外,借助于客户端JavaScript脚本框架JQuery你也能实现 同样的目的,而且借助于开源工程 MVCContrib似乎你也能够实现同样的Ajax支 持。本文中,我们针对ASP.NET MVC Preview 4框架提供的Ajax作一简单 的讨论,分析其提供的基本的Ajax支持功能。二、实例剖析(一 )创建示例ASP.NET MVC工程启动Visual Studio 2008(我使用的是Team System版本)创建一个新的ASP.NET MVC工程,并命名为MvcBuiltinAjax(注: 本实例中使用的是目前最新的ASP.NET MVC Preview 4;而且在本例中我们并不 关心是否加入单元测试支持框架的问题)。(二)修改视图页面 Index.aspx请注意,本例中我们直接修改视图页面Index.aspx。我们将 在此页面中添加一个文本框和一个按钮控件。我们的目的是,当点击此按钮控件 时,执行表单提交功能。通过此过程,我们将回调服务器端并取得相应的字符串 ,而且此字符内容将被以Ajax方式填入到按钮控件旁边的div元素中。图1展示了 实例程序的某一运行时刻的快照。图中,当我们在文本框中输入字符串“ 张三”时,后台控制器Action方法查询已有数据串,如果其中没有刚刚输 入的内容,则显示“ 可以使用这个名字!”;否则,显示 “ 此名字已经被使用了!”的提示。现在,我们来看一下修改视图 Index.aspx中涉及的主要内容,如下所示:<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server" >
<p>
<%using (Ajax.Form ("ExamineTextBox", new AjaxOptions {UpdateTargetId = "resultDiv" }))
{ %>
<%= Html.TextBox("textBox1")%>
<input type="submit" value="Button"/>
<span id="resultDiv"/>
<% } %>
</p>
</asp:Content>
请注意这里所使用的Ajax.Form帮助函数和 引用span元素的UpdateTargetID属性的值。有关AjaxOptions的用法也有许多值 得考察的地方,后面再进行讨论。如果你进一步分析一下运行时刻上面 视图页面的相应源码,那么,你会注意到对应于上面内容的如下一段内容:<p>
<form action="/Home/ExamineTextBox" onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, { insertionMode: 0, updateTargetId: "result" }); return false;"><input type="text" name="textBox1" id="textBox1" value="" />
< input type="submit" value="提交"/>
<span id="result"/>
</form>
< /p>
正如你所想像的,在前面的编码中,我们也完全可以直接使用这 里的Sys.Mvc.AsyncForm.handleSubmit函数,只是上面的形式更为直观且易于使 用罢了。