• 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是趋势。

  • 相关阅读:
    计算机网络 3.* 数据通信技术基础 .1
    计算机网络3.2&3.3(第二节介质&第三节多路复用)
    python mooc 3维可视化<第一周第二&三单元>
    python mooc 3维可视化<第一周第一单元>
    conda 下配置环境
    第二周<岭回归>
    第二周<线性回归>
    第二周<导学/分类>
    iOS UILabel详解
    开始iOS 7中自动布局教程(一)
  • 原文地址:https://www.cnblogs.com/dudu/p/not_asp_net_mvc.html
Copyright © 2020-2023  润新知