ASP.NET MVC+jQuery+Newtonsoft.Json 快乐的AJAX

这是目前我的方案,个人觉得还蛮轻巧自在的。Controller负责把要输出的资料序列成json。

Html.ActionUrl 这只method原来的MVC Toolkit没有,我随手加的。

我是用Newtonsoft.Json作物件序列成JSON,那为什麽不用MS Ajax内建的 System.Web.Script.Serialization.JavaScriptSerializer 来做,是因为他将DateTime序列成字串格式,Client 端无法直接取用。Newtonsoft.Json的部份我也是小改一点,让他可以做Value Type 的序列化,可参考。

附带一提,我是架在iis 5.1上测试,本来看到 IIS 6.0 和 ASP.NET 3.5 / VS 2008 的相容性测试,己为会很困难的,大概是测MVC Web Project比较单纯吧,装完 .NET Framework 3.5 再装 ASP.NET 3.5 Extensions Preview (是的,目前只是preview版),直接就ok了。

底下的流程 Controller(AjaxTest) -> View(AjaxPage) -> Controller(Ajax, id=1) -> View(AjaxPage) 取得json ->Controller(Ajax, id=2) -> View(AjaxPage) 取得json -> end ,大概是这样。(如果画成图会比较漂亮吧)

ControllerBase.cs
  public class ControllerBase : Controller {
    public void RenderJSON(object obj) {
      string jsonString = Newtonsoft.Json.JavaScriptConvert.SerializeObject(obj);
      Response.Clear();
      Response.ContentEncoding = Encoding.UTF8;
      Response.ContentType = "application/json";
      Response.Write(jsonString);
      Response.Flush();
      Response.End();
    }
  }
HomeController.cs
  public class HomeController : ControllerBase {
    [ControllerAction]
    public void AjaxTest() {
      RenderView("AjaxPage");
    }
    [ControllerAction]
    public void Ajax(int id) {
      switch (id) {
        case 1:
          RenderJSON(DateTime.Now.ToString());
          break;
        case 2:
          Order[] orders = new Order[] {
            new Order() {PK=1, Title="B001", OrderDate = DateTime.Now},
            new Order() {PK=2, Title="A003", OrderDate = DateTime.Now}
          };
          RenderJSON(orders);
          break;
        case 3:
          int n1,n2;
          int.TryParse(Request["n1"],out n1);
          int.TryParse(Request["n2"],out n2);
          RenderJSON(n1 + n2);
          break;
      }
    }
  }
}
AjaxPage.aspx
 <script language="javascript" type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.2.1.min.js"></script>
 <script language="javascript" type="text/javascript">
  $(document).ready(function() {
    var actionUrl1 = '<%=Html.ActionUrl("ajax", "/1") %>';
    var actionUrl2 = '<%=Html.ActionUrl("ajax", "/2") %>';
    var actionUrl3 = '<%=Html.ActionUrl("ajax", "/3") %>';
    $("#link1").click(function() {
      $.getJSON(actionUrl1, { }, function(json){
       alert("Server Time: " + json);
      });
    });
    $("#link2").click(function() {
      $.getJSON(actionUrl2, { }, function(json){
       alert("total " + json.length.toString() + " records");
       for(var i=0;i<json.length;i++) {
        alert(json[i].PK + ", " + json[i].Title + ", " + json[i].OrderDate);
       }
      });
    });
    $("#t1,#t2").change(function() {
      $.getJSON(actionUrl3, { "n1": $("#t1").val(),"n2": $("#t2").val() }, function(json){
       $("#t3").val(json.toString());
      });
    });
  });
 </script>
 <h3>
  Ajax Page</h3>
 <ol>
  <li><a id="link1" href="#">Get Server Time</a></li>
  <li><a id="link2" href="#">Return Object</a></li>
  <li>
   <input type="text" name="t1" id="t1" maxlength="4" style="width: 40px" />
   +
   <input type="text" name="t2" id="t2" maxlength="4" style="width: 40px" />
   =
   <input type="text" name="t3" id="t3" maxlength="4" readonly="readonly" style="width: 40px" />
  </li>
 </ol>

时间: 2024-08-03 16:17:33

ASP.NET MVC+jQuery+Newtonsoft.Json 快乐的AJAX的相关文章

使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇_jquery

调用jQuery的ajax方法时,jQuery会根据post或者get协议对参数data进行序列化; 如果提交的数据使用复杂的json数据,例如: {userId:32323,userName:{firstName:"李",lastName:"李大嘴"}} 那么服务器是无法正常接收到完整的参数,因为jQuery对data的序列化,是使用了键值对拼装的方式; 参数拼装成 userId=32323&userName=object ; userName所指向的对象

文件下载-asp.net mvc+jquery 如何将服务器的excel文件导出到客户端下载?

问题描述 asp.net mvc+jquery 如何将服务器的excel文件导出到客户端下载? 问题描述 希望实现的功能是页面点击"导出"button,服务器端即将页面上显示的数据制成excel(已完成该功能)临时存放在服务器,然后将文件下载到客户端. 现在是在服务器生成excel文件后,不知道怎么样将文件传递给客户端. "导出"button的js和controller的action请问该如何实现? 即asp.net mvc+jquery如何实现文件下载 本人新手,

中大型系统架构组合之EF4.1+ASP.NET MVC+JQuery

EF4.1已经推出有一段时间了,它给人的第一吸引力就是比LINQ TO SQL更加适合大型项目,它的封装更加紧密,操作也更加灵活,而且弥补了LINQ To SQL的最大不足,可以支持多种数据库.   EF4.1+ASP.NET MVC+JQuery 第一先说一下EF4.1: 我们数据层OR/Mapping采用EF4.1来实现数据的持久化 我们必须要对EF4.1进行一个封装,把对数据的操作限制在DATA层,不能向上一层暴露太多实现的细节,这样作是安全的,层次分明的. 对数据操作有一个泛型接口来实现

返璞归真 asp.net mvc (5) - Action Filter, UpdateModel, ModelBinder, Ajax, Unit Test

原文:返璞归真 asp.net mvc (5) - Action Filter, UpdateModel, ModelBinder, Ajax, Unit Test[索引页][源码下载] 返璞归真 asp.net mvc (5) - Action Filter, UpdateModel, ModelBinder, Ajax, Unit Test 作者:webabcd 介绍 asp.net mvc 之 Action Filter, UpdateModel, ModelBinder, Ajax, U

一起谈.NET技术,ASP.NET MVC中的Json Binding和Validate

电子商务网站支付功能页面往往会有很多信息,对于这些信息的保存,往往是分步完成的,那么使用Ajax最合适不过了,比如其中的收货人信息模块.这些信息的新建和编辑保存都是用Ajax来完成的.那么有几种方式完成这个操作呢,我想到如下几种. 先来看看该功能的截图: 一般情况下这些信息会对应一个实体类,就命名为:ReceiverInfo,简单起见,我定义ReceiverInfo如下: 1.将需要的值拼接成json文本,再Action里面处理 首先您需要将要保存的值拼接成一个json文本,类似: var te

ASP.NET MVC中的Json “.NET研究”Binding和Validate

电子商务网站支付功能页面往往会有很多信息,对于这些信息的保存,往往是分步完成的,那么使用Ajax最合适不过了,比如其中的收货人信息模块.这些信息的新建和编辑保存都是用Ajax来完成的.那么有几种方式完成这个操作呢,我想到如下几种. 先来看看该功能的截图: 一般情况下这些信息会对应一个实体类,就命名为:ReceiverInfo,简单起见,我定义ReceiverInfo如下: 1.将需要的值拼接成json文本,再Action里面处理 首先您需要将要保存的值拼接成一个json文本,类似: var te

jQuery/asp.net mvc DateTime 的处理

在Javascript中的DateTime需要使用new Date(318326400000),asp.net mvc返回的Json时间格式变成了/Date(318326400000)/ jQuery.ajax() 函数消费的Json数据的Date类型可以通过jQuery 1.2.6以上版本所增加的 jQuery.ajax.dataFilter 第一步通过jQuery.ajax()的dataFilter函数预处理asp.net datetime 对象到本地的javascript对象 $.ajax

MVC+Jquery开发B/S系统 (一) 列表绑定(三)

除了绑定Table外,还有其他的循环列表需要绑定. 其实都一样,都是把模版化成数据.模板的存法用注释的方式只是一种方法.更好的方法自由发挥 .目前就是为了取得模板. 比如 用一个Json来存放需要的Template,然后专门放在一个templates.js里或由xml配置的模板然 后生成json数据, 需要用的时候直接 templates.tempName 就可以了. 写博文太累了.特别是自己的思想给别人分享时更累.我这里也不赘述了.贴下代码吧 代码 ; (function($) { var t

[ASP.NET MVC 小牛之路]18 - Web API

原文:[ASP.NET MVC 小牛之路]18 - Web API Web API 是ASP.NET平台新加的一个特性,它可以简单快速地创建Web服务为HTTP客户端提供API.Web API 使用的基础库是和一般的MVC框架一样的,但Web API并不是MVC框架的一部分,微软把Web API相关的类从 System.Web.Mvc 命名空间下提取了出来放在 System.Web.Http 命名空间下.这种理念是把 Web API 作为ASP.NET 平台的核心之一,以使Web API能使用在