zoukankan      html  css  js  c++  java
  • 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是趋势。

  • 相关阅读:
    block iOS 块
    面试有感
    Could not automatically select an Xcode project. Specify one in your Podfile like so
    xcrun: error: active developer path
    NSDictionary
    CSS3魔法堂:CSS3滤镜及Canvas、SVG和IE滤镜替代方案详解
    转:CSS盒模型
    转:手机端html5触屏事件(touch事件)
    转: div:给div加滚动条 div的滚动条设置
    转:什么时候用阻止事件冒泡
  • 原文地址:https://www.cnblogs.com/dudu/p/not_asp_net_mvc.html
Copyright © 2011-2022 走看看