摘要:ASP.NET MVC 使用 Json 範例
ASP.NET MVC 使用 Json 範例
2014/9/23 更新,我已重寫範例,請至 http://nolife.smartdog.tw/Default/Detail/3
2011/7/23 更新,感謝 kkkk 大大提醒~~
請注意 public ActionResult GetJson(MyJson obj) 可以用,其實是jquery的特性,回傳多筆物件時不適用!
假設 JavaScript 長這樣
var MyJson = { "User_ID": 1, "User_Name": "張笨狗" };
$(document).ready(function () {
$.ajax({
url: "MySample/GetJson/",
type:"post",
dataType:"json",
data: MyJson,
success: setValue
});
});
function setValue(data) {
var MyReturn = "";
for (i = 0; i < data.length; i++) {
MyReturn += data[i].User_ID + ";" + data[i].User_Name + "<br />";
}
$('#MyTestAjax').html(MyReturn);
}
C# Controller
先定義Json的物件
public class MyJson
{
public int User_ID{get; set;}
public string User_Name { get; set; }
}
然後放在Method 當變數就可以在Server接到值了 = =" 簡單到有點扯,Asp.net 會自動Binding進物件
[HttpPost]
public ActionResult GetJson(MyJson obj)
{
//--可以直接用,但不適用多筆物件
string m = obj.User_Name;
//--要吐出 Json 時可以這樣用
var JsonUser_Info = from x in db.User_Info
select new MyJson {
User_ID = x.User_ID,
User_Name =x.User_Name
};
return Json(JsonUser_Info.ToList());
}
也可以直接這樣選欄位
[HttpPost]
public ActionResult GetJson()
{
var JsonUser_Info = from x in db.User_Info
select new { x.User_Name, x.User_ID };
return Json(JsonUser_Info.ToList());
}
如果接收的資料為多筆物件時,還是必須使用其他方式,詳細還請參考黑暗大的文章
http://blog.darkthread.net/post-2011-06-16-hashtable-to-dictionary.aspx
小弟一開始直接用竟然可以把資料Binding進物件,太開心,竟沒注意到多筆時會有問題~~
只是這件事也讓我覺的怪怪的
那為什麼 var MyJson = { "User_ID": 1, "User_Name": "張笨狗" }; 可以在接收時直接Binding?
趁著假日睡不著,就小小的研究了一下,原來是在物件類似 MyJson 這樣單純時,JQuery 會以類似 POST 的格式傳回server,以前竟然沒注意到!
所以 .Net 才能在接收時把資料Bindind 進物件,因為對 .Net 來說,他其實就是 POST 參數
有圖有真相 ↓↓↓
MyJson 變成了POST參數格式 User_ID=1&User_Name=%E5%BC%B5%E7%AC%A8%E7%8B%97
