? ? 在MVC架構中,盡管非常多東西和三層非常相似,可是也有非常大的差別。就比方傳遞數(shù)據(jù)。在三層架構中,傳遞數(shù)據(jù)就僅僅要一層返回,另外一層用同樣類型的變量來接收即可了。在MVC中,事實上原理是一樣的,Controller中的方法返回Json字符串。然后View來接收?;蛘叻催^來,不同的就是這之間須要一個序列化和反序列化的過程。
? ? 本文就簡介利用Json在View和Controller之間傳遞數(shù)據(jù)的一個方面,大致從雙方面介紹,一是什么是Json,二是怎樣實現(xiàn)。
什么是Json
一、概念
? ? 百度百科說:JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式。它基于ECMAScript的一個子集。JSON採用全然獨立于語言的文本格式,可是也使用了類似于C語言家族的習慣。
這些特性使JSON稱為理想的數(shù)據(jù)交換語言。
易于人閱讀和編寫,同一時候也易于機器解析和生成。
? ? 說白了,Json就是實現(xiàn)了不同格式的數(shù)據(jù)的交換,簡單理解就是,Json能夠把其它格式的數(shù)據(jù)轉換為字符串。也能夠把字符串解析為其它格式數(shù)據(jù)。這也就實現(xiàn)了所謂的序列化和反序列化的過程。
? ? 序列化和反序列化并不僅僅是這一種轉換,簡單理解能夠覺得對象轉化成字符串的過程為序列化,字符串解析為對象的過程稱為是反序列化。詳細在不同語言或平臺的使用方法,讀者能夠自己動手查一查。
二、語法
Json語法是JavaScript對象表示語法的子集,有以下幾個特點:
? ? ●數(shù)據(jù)在鍵值對中
? ? ●數(shù)據(jù)由逗號分隔
? ? ●花括號保存對象
? ? ●方括號保存數(shù)組
比如:
<span style="font-family:KaiTi_GB2312;font-size:18px;">{"people":[
{"name":"Brett","age":"21","sex":"男"},
{"name":"Elliotte","age":"25","sex":"女"},
{"name":"Jason","age":"30","sex":"男"},
]}</span>
? ??
? ? “name”:"Brett"稱為一個鍵值對,數(shù)據(jù)就保存在鍵值對中;數(shù)據(jù)與數(shù)據(jù)之間用逗號分隔開;由代碼能夠看出,這是三個詳細的people對象,三個人構成數(shù)組。所以代碼中花括號保存對象。方括號保存數(shù)組。
三、格式轉換
<span style="font-family:KaiTi_GB2312;font-size:18px;">var myObject={"people":[
{"name":"Brett","age":"21","sex":"男"},
{"name":"Elliotte","age":"25","sex":"女"},
{"name":"Jason","age":"30","sex":"男"},
]}</span>
這樣就實現(xiàn)了將Json字符串賦給myObject這個變量。
? ? 假設要進行改動則myObject.people[0].name="Fiala"這樣就對name為Brett這個人的姓名進行了改動,當然改動完畢后還應該轉換回Json。以便傳輸數(shù)據(jù),那么就是String myObjectInJSON = myObject.toJSONString();?
怎樣實現(xiàn)
一、Controller向View返回
? ? Controller中的方法:
<span style="font-family:KaiTi_GB2312;font-size:18px;"> #region 管理員管理界面分頁查詢 QueryBy(string strLike)
/// <summary>
/// 管理員管理界面分頁查詢
/// </summary>
/// <param name="strLike">要查詢的內容</param>
/// <returns>Json數(shù)據(jù)</returns>
public ActionResult QueryBy(string strLike)
{
//詳細實現(xiàn)過程,此處省略??!
//將返回的數(shù)據(jù)序列化為Json格式
var data = new
{
total,
rows = from a in result select new { a.ID, a.AdminID, a.AdminLevel, a.AdminName, a.AdminPassword,a.IsUsed }
};
//返回Json數(shù)據(jù)
return Json(data, JsonRequestBehavior.AllowGet);
}</span>
界面接收時。會通過表格初始化時的URL屬性調用Controller中的詳細方法,然后進行解析,并賦值給表格。
二、View向Controller傳遞數(shù)據(jù)
<span style="font-family:KaiTi_GB2312;font-size:18px;">$.ajax(
{
url: '/Administrator/Edit',
type: "post",
async: true,
dataType: 'json',
data: { 'AdminName': 'Brett' },
success: function (data) {
if (data == 'true') {
alert("更新成功!
"); } } } );</span>
? ? 這是一種固定格式,URL代表提交的路徑。type表示是提交還是獲取。在這里是提交。data中才是真正儲存的要提交的數(shù)據(jù)。
總結
? ? 現(xiàn)階段學的東西總感覺模模糊糊的,不能系統(tǒng)的去理解,可能是由于學的時間短,研究的不夠深入。可是學習總要經歷這么個階段嘛。文章中僅僅是我自己的理解,假設有不正確的地方還請大家指正。謝謝!
假設有什么更好的看法。希望能跟大家多多交流。
本文摘自 :https://blog.51cto.com/u