ASP.NET MVC 使用 Json 範例

  • 22910
  • 0
  • 2014-09-23

摘要: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