簡體   English   中英

為什么在MVC應用程序中使用JSON?

[英]Why Using JSON in MVC application?

首先,如果這是一個愚蠢的問題,我想道歉。 在學習MVC的過程中我創建了一個基於模型的強類型視圖,例如將通過2個不同的函數顯示所有用戶,首先將返回一個視圖,傳遞用戶的集合,第二個將返回JSON對象的集合。 所以我的問題是,因為我不熟悉JSON,對我來說使用模型更清楚,為什么然后在MVC中使用JSON?

簡而言之為什么使用:

var users = _db.Users
           .Where(r => r.Name.Contains(q))
           .Take(10)
           .Select(r => new { r.Name,r.LastName,r.Address.Country });
        return Json(users, JsonRequestBehavior.AllowGet);

取代:

 var users= _db.Users
           .Where(r => r.Name.Contains(q))
           .Take(10);
            return View(users);

也許這是一個糟糕的代碼示例,但是為什么在將模型傳遞給視圖之前將模型轉換為Jason,如果我們可以直接傳遞模型。

如果您希望調用返回可以在瀏覽器中呈現的HTML,您將返回一個View,它基本上獲取數據並將其應用於HTML模板。

如果您希望調用僅返回數據(最有可能由AJAX請求處理),那么您將返回JSON。

對於第一個代碼片段,它更可能是用於ajax調用,以便將數據從服務器無縫加載到客戶端,並且可能在不重新加載頁面的情況下繼續刷新它。 此外, Users實體可能擁有的信息遠遠多於客戶端所需的信息,因此第一個示例是減少所提供的信息,並且不需要您創建新模型來表示它。

第二個示例是實際返回視圖的控制器操作,並且該視圖是強類型的。

如果您要創建一個使用WebApi的項目,您將不會返回視圖,您可能希望客戶端請求數據,並且客戶端會呈現它認為合適的方式。

第一個是返回帶有application/json內容類型的application/json而后者將返回內容類型為text/html (在相應的View Rendering Engine渲染了相關視圖之后) - 它們可以被認為是兩種不同的表示形式相同的資源。 您可能希望返回JSON以響應通過AJAX發出的請求,並僅返回所需模型中的數據,但您可能希望返回HTML以響應“正常”請求。

開箱即用,ASP.NET MVC不支持內容協商,即,使用設置為特定MIME類型的AcceptAccept出請求可能不會產生具有預期內容類型的響應 - 控制器操作將占大多數case被配置為返回一種特定內容類型的資源(通常是html)。 另一方面,ASP.NET Web Api確實支持開箱即用的內容協商。

JSON(=僅數據)通常用於異步(AJAX)請求,因為它們可以通過Javascript輕松處理,而視圖則是樣式化的HTML響應,可供瀏覽器顯示。

客戶端庫非常了解JSON,因此如果要解析結果並使用客戶端框架/自定義腳本對其進行操作,那么JSON是更好的選擇(AngularJs就是一個例子)。

除了您的問題,在使用JSON時,首先將Model轉換為JSON,但是當用戶發布請求時,您可以將JSON重新轉換為模型,以便將結果保存到DB。 :-) 一世

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM