Ajax为主的应用不需要ASP.NET MVC

更新:这是一个错误的观点,详情请看事实证明Ajax的世界更需要ASP.NET MVC

博客园在开发中至今还未使用ASP.NET MVC,似乎有点跟不上时代了,但是否采用一项技术,关键的是这个技术是否能真正解决实际问题。

这篇文章将以我们正在开发的博客园新版站内短消息功能为例,说明一下不需要ASP.NET MVC的理由。

功能简介:短消息收件箱,显示当前用户短消息列表。

用到的主要技术:Master Page, jQuery, jQuery插件Templates, WCF。

Templates是由微软开发的jQuery插件,功能类似于ASP.NET的Repeater控件,Templates将被整合进jQuery 1.5成为核心组件。想更多了解Templates,推荐阅读Microsoft and jQuery

主要代码:

1. ASP.NET页面文件:

<%@ Page Title="" Language="C#" MasterPageFile="msg.master" %>
<asp:Content ID="ContentMain" ContentPlaceHolderID="cphMain" Runat="Server">
<div id="msg_list">
</div>
<script id="contentTmpl" type="text/x-jquery-tmpl">
<div class="msg_item">
<div class="msg_sender">${SenderName}</div>
<div class="msg_title">${Subject}</div>
<div class="msg_sendtime">${SendTime}</div>
</div>
</script>
<script type="text/javascript">
GetMsgList(
1, 30);
</script>
</asp:Content>

上面的代码通过GetMsgList方法a调用WCF获取短消息列表,然后显示在msg_list中。

这里用Master Page是为了重用HTML的公用元素,不然,只要一个html文件就够了,.aspx都不需要,为什么还要用ASP.NET MVC?对于这样的ajax应用,只要加载一个简单的html页面,接下来就交给js了,就是需要MVC,也是在js中进行,ASP.NET MVC无用武之处。

不用ASP.NET MVC,这一个理由足矣。

为了完整地介绍这个示例,继续我们的代码。

2. js代码:

a) js文件引用

<script type="text/javascript" src="http://common.cnblogs.com/script/jquery.js"></script>
<script type="text/javascript" src="http://common.cnblogs.com/script/json2.js"></script>
<script type="text/javascript" src="js/jquery.tmpl.min.js"></script>
<script type="text/javascript" src="js/msg.js"></script>

json2.js是用于将js对象转换为json。

jquery.tmpl.min.js是jQuery插件Templates的引用文件。

msg.js中定义了GetMsgList方法。

b) GetMsgList方法定义:

function GetMsgList(pageIndex, pageSize) {
var msgQuery = {}
msgQuery.PageIndex
= pageIndex;
msgQuery.PageSize
= pageSize;

$.ajaxSettings.type
= 'post';
$.ajaxSettings.dataType
= 'json';
$.ajaxSettings.contentType
= 'application/json';
$.ajaxSettings.url
= '/services/AjaxMsgService.svc/GetMsgList';
$.ajaxSettings.data
= '{"msgQuery":' + JSON.stringify(msgQuery) + '}';
$.ajaxSettings.success
= function (data) {
$(
"#contentTmpl").tmpl(data.d).appendTo("#msg_list");
};
$.ajax();
}

“/services/AjaxMsgService.svc”——调用的WCF服务,jQuery如何调用WCF请参考抛弃WebService,在.NET4中用 jQuery 调用 WCF

“JSON.stringify(msgQuery)”——将msgQuery对象转换为json,WCF中对应的方法是“GetMsgList(SiteMsgQuery msgQuery)”,达到的效果是将js对象作为参数传给了WCF方法。在之前文章的评论中有人说jQuery调用.ashx更方便,从这里的效果看,我觉得jQuery调用WCF(或.asmx)更方便。

$("#contentTmpl").tmpl(data.d).appendTo("#msg_list");——将WCF返回的数据绑定至contentTmpl(见代码一)形成列表,并加载至msg_list,完成数据的显示。这就是Templates插件的作用。

3. WCF代码:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode
=
AspNetCompatibilityRequirementsMode.Allowed)]
public class AjaxMsgService
{
[OperationContract]
public SiteMsg[] GetMsgList(SiteMsgQuery msgQuery)
{
int spaceUserId = Util.GetCurrentUser(HttpContext.Current).SpaceUserID;
msgQuery.SiteMsg
= new SiteMsg() { RecipientSpaceUserId = spaceUserId };
//调用后台的WCF服务
MsgServiceClient client = new MsgServiceClient();
SiteMsg[] siteMsgList
= client.GetMsgList(msgQuery);
try { client.Close(); }
catch { client.Abort(); }

return siteMsgList;
}
}

这里的WCF相当于一个中转站,它又去调用后台另外一台服务器上的WCF服务,获取短消息数据,以json格式返回给客户端js。

示例介绍完毕,不足之处欢迎大家指出。

总结

随着越来越多的Web应用使用Ajax,ASP.NET MVC施展身手的空间越来越小。

现在唯一阻碍Ajax使用的是搜索引擎不能索引Ajax加载的内容,但这个情况一定会改观,Ajax是趋势,Web App是趋势。

posted @ 2011-01-31 12:00  dudu  阅读(8557)  评论(57编辑  收藏  举报