當(dāng)前位置:首頁(yè) > IT技術(shù) > Web編程 > 正文

【MVC架構(gòu)】——怎樣利用Json在View和Controller之間傳遞數(shù)據(jù)
2021-10-08 17:28:29



? ? 在MVC架構(gòu)中,盡管非常多東西和三層非常相似,可是也有非常大的差別。就比方傳遞數(shù)據(jù)。在三層架構(gòu)中,傳遞數(shù)據(jù)就僅僅要一層返回,另外一層用同樣類型的變量來接收即可了。在MVC中,事實(shí)上原理是一樣的,Controller中的方法返回Json字符串。然后View來接收。或者反過來,不同的就是這之間須要一個(gè)序列化和反序列化的過程。


? ? 本文就簡(jiǎn)介利用Json在View和Controller之間傳遞數(shù)據(jù)的一個(gè)方面,大致從雙方面介紹,一是什么是Json,二是怎樣實(shí)現(xiàn)。


什么是Json


一、概念


? ? 百度百科說:JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于ECMAScript的一個(gè)子集。JSON採(cǎi)用全然獨(dú)立于語(yǔ)言的文本格式,可是也使用了類似于C語(yǔ)言家族的習(xí)慣。

這些特性使JSON稱為理想的數(shù)據(jù)交換語(yǔ)言。

易于人閱讀和編寫,同一時(shí)候也易于機(jī)器解析和生成。


? ? 說白了,Json就是實(shí)現(xiàn)了不同格式的數(shù)據(jù)的交換,簡(jiǎn)單理解就是,Json能夠把其它格式的數(shù)據(jù)轉(zhuǎn)換為字符串。也能夠把字符串解析為其它格式數(shù)據(jù)。這也就實(shí)現(xiàn)了所謂的序列化和反序列化的過程。


? ? 序列化和反序列化并不僅僅是這一種轉(zhuǎn)換,簡(jiǎn)單理解能夠覺得對(duì)象轉(zhuǎn)化成字符串的過程為序列化,字符串解析為對(duì)象的過程稱為是反序列化。詳細(xì)在不同語(yǔ)言或平臺(tái)的使用方法,讀者能夠自己動(dòng)手查一查。


二、語(yǔ)法


Json語(yǔ)法是JavaScript對(duì)象表示語(yǔ)法的子集,有以下幾個(gè)特點(diǎn):

? ? ●數(shù)據(jù)在鍵值對(duì)中

? ? ●數(shù)據(jù)由逗號(hào)分隔

? ? ●花括號(hào)保存對(duì)象

? ? ●方括號(hào)保存數(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"稱為一個(gè)鍵值對(duì),數(shù)據(jù)就保存在鍵值對(duì)中;數(shù)據(jù)與數(shù)據(jù)之間用逗號(hào)分隔開;由代碼能夠看出,這是三個(gè)詳細(xì)的people對(duì)象,三個(gè)人構(gòu)成數(shù)組。所以代碼中花括號(hào)保存對(duì)象。方括號(hào)保存數(shù)組。


三、格式轉(zhuǎn)換


<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>

這樣就實(shí)現(xiàn)了將Json字符串賦給myObject這個(gè)變量。


? ? 假設(shè)要進(jìn)行改動(dòng)則myObject.people[0].name="Fiala"這樣就對(duì)name為Brett這個(gè)人的姓名進(jìn)行了改動(dòng),當(dāng)然改動(dòng)完畢后還應(yīng)該轉(zhuǎn)換回Json。以便傳輸數(shù)據(jù),那么就是String myObjectInJSON = myObject.toJSONString();?

怎樣實(shí)現(xiàn)


一、Controller向View返回


? ? Controller中的方法:

<span style="font-family:KaiTi_GB2312;font-size:18px;">        #region 管理員管理界面分頁(yè)查詢 QueryBy(string strLike)
/// <summary>
/// 管理員管理界面分頁(yè)查詢
/// </summary>
/// <param name="strLike">要查詢的內(nèi)容</param>
/// <returns>Json數(shù)據(jù)</returns>
public ActionResult QueryBy(string strLike)
{
//詳細(xì)實(shí)現(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>


界面接收時(shí)。會(huì)通過表格初始化時(shí)的URL屬性調(diào)用Controller中的詳細(xì)方法,然后進(jìn)行解析,并賦值給表格。


二、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中才是真正儲(chǔ)存的要提交的數(shù)據(jù)。


總結(jié)

? ? 現(xiàn)階段學(xué)的東西總感覺模模糊糊的,不能系統(tǒng)的去理解,可能是由于學(xué)的時(shí)間短,研究的不夠深入。可是學(xué)習(xí)總要經(jīng)歷這么個(gè)階段嘛。文章中僅僅是我自己的理解,假設(shè)有不正確的地方還請(qǐng)大家指正。謝謝!

假設(shè)有什么更好的看法。希望能跟大家多多交流。





本文摘自 :https://blog.51cto.com/u

開通會(huì)員,享受整站包年服務(wù)立即開通 >