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

news/2024/7/7 21:32:10 标签: asp.net, mvc, jquery, json, ajax, function

這是目前我的方案,個人覺得還蠻輕巧自在的。 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>
 

http://www.niftyadmin.cn/n/1413539.html

相关文章

菱形继承与菱形虚拟继承

“菱形继承与菱形虚拟继承” “继承”是c面向对象语言的特点之一&#xff0c;对于一个类&#xff0c;我们如果想对这个类的功能进行扩充&#xff0c;这就可以通过"继承"的方式重新增添或删除这个类中的某些功能。C语言支持单继承和多继承&#xff0c;如果不大清楚单…

微調一下 Json.net ,讓他可以序列基本型別

因為 Json.net 是有附原始碼的&#xff0c;他也附了單元測試的專案&#xff0c;底下是我額外增加的UnitTest&#xff0c;我的目標就是讓底下的測試可以pass&#xff0c;而且原來的Test 也要都能通過。 ValueTypeTest.cs using System;using NUnit.Framework;namespace Newtons…

.Net 底下,Json 相關套件的限制

Json.Net 無法序列基本型別(string, int)&#xff0c;Asp.Net Ajax 無法正確序列日期&#xff0c;AjaxPro序列出我不想要的_type字串 1. Json.Net 是我最常使用的序列/反序列json套件&#xff0c;標榜速度快&#xff0c;對於一對多關係的object 也都能正常運作, 己能滿足我平日…

SpringBoot开发案例之打造私有云网盘

前言 最近在做工作流的事情&#xff0c;正好有个需求&#xff0c;要添加一个附件上传的功能&#xff0c;曾找过不少上传插件&#xff0c;都不是特别满意。无意中发现一个很好用的开源web文件管理器插件 elfinder&#xff0c;功能比较完善&#xff0c;社区也很活跃&#xff0c;还…

MySQL TOO BAD row's Range Lock Compare with PostgreSQL and Oracle

MySQL的InnoDB引擎&#xff0c;当UPDATE一个范围的数据时&#xff0c;会锁住比预期更多的ROW&#xff0c;而Oracle和PostgreSQL没有这种现象.来自《High Performance MySQL》一书。测试版本:MySQL 5.5.10PostgreSQL 9.0.2Oracle 10.2.0.4举例如下:1. MySQL (有索引的情况)Sessi…

数论——找新朋友 (欧拉函数)

新年快到了&#xff0c;“猪头帮协会”准备搞一个聚会&#xff0c;已经知道现有会员N人&#xff0c;把会员从1到N编号&#xff0c;其中会长的号码是N号&#xff0c;凡是和会长是老朋友的&#xff0c;那么该会员的号码肯定和N有大于1的公约数&#xff0c;否则都是新朋友&#xf…

Windows server 2003 QQ宠物猪伴侣出错解决办法

运行pigmate后&#xff0c;桌面什么都没有&#xff0c;右下角系统托盘也没有图标&#xff0c;在任务管理器里面倒是可以看到“猪猪伴侣”的条目&#xff0c;运行QQ宠物猪&#xff0c;也不见被伴侣托管 系统平台&#xff1a;enterprise server 2003 sp2 别人的解决方案&#xff…

vue从入门到进阶:渲染函数 JSX(八)

文章目录节点、树以及虚拟 DOMcreateElement 参数 深入 data 对象完整示例约束使用 JavaScript 代替模板功能 v-if 和 v-forv-model事件 & 按键修饰符插槽JSX函数式组件 slots() 和 children 对比Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML。然而在一些场景中…