2009-11-13 42 views
0

我想在頁面第一次加載時用數據庫中的項目列表填充JSON對象。這個項目列表來自數據庫。現在,我強烈地鍵入View並且遍歷項目列表以構建HTML無序列表,然後在JavaScript中根據HTML中輸出的內容構建JSON對象。但這很笨拙。理想情況下,我想從Controller中的數據庫中獲取這些數據,填充一個對象(或變量),然後將該變量發送到JavaScript以供在那裏使用,並跳過其間的HTML(HTML將使用jQuery動態更新)。到達JavaScript的變量不一定是JSON對象,但它需要保存我從Controller填充的信息。從那裏,我可以在JavaScript中構建JSON對象。如何從MVC控制器生成和傳輸JavaScript變量?

一位朋友告訴我這是可能的,他目前使用這種方法,但從未在ASP.NET MVC中嘗試過。有任何想法嗎?

澄清:我應該一直在我原來的問題更加清楚,但我想送過來的變量/ JSON到外部 JavaScript文件,而不是處理JSON對象/標籤內的即時創建。

+1

我們在這裏談論ASP.NET MVC嗎? – 2009-11-13 15:06:58

+0

是的,我爲這個項目使用ASP.NET MVC。 – 2009-11-13 15:10:25

回答

1

在你的控制器只是

return Json(yourObject); 

,而不是

return View(yourObject); 

MVC框架會序列幾乎所有的東西成JSON,只是看出來有一個圓形的LINQ到SQL對象關係。

如果您隨後使用jQuery ajax調用此函數,您將在「數據」中獲得JSON對象。

如果你希望你的控制器能夠同時返回HTML(視圖)或JSON,你可以檢查,如果該請求是像這樣一個Ajax請求:

if(Request.IsAjaxRequest()) 
{ 

} 
+0

Odge,這是我已經開始實現這個的方式,即使它意味着一旦頁面加載以獲得該數據時服務器的第二次命中(我試圖保留它以使數據在那裏在頁面加載時無需再次點擊服務器)。但是如果我堅持這條路線,我確實希望控制器能夠返回一個View或JsonResult。這裏的問題:那時候我的控制器的返回類型是什麼?有些時候它需要成爲ActionResult,有些則需要成爲JsonResult。參數也會因呼叫而異... – 2009-11-14 05:14:47

+0

返回類型仍然是ActionResult,因爲JsonResult和ViewResult都繼承了ActionResult。 – 2009-11-15 08:43:42

0

是的。查找JSON序列爲你從這裏使用的語言:http://www.json.org/

然後,一旦你實例化和填充你的數據對象,你應該能夠調用.toJSONString()方法(或類似),這將吐出JSON傳送給客戶。

+0

我想我也想知道如何最好地將它傳送給客戶端。 AJAX是唯一的出路嗎,還是MVC中有一些內置的方法? – 2009-11-13 15:11:17

0

您可以渲染一些JavaScript而不是HTML中的無序列表。因此,如果你希望能夠訪問JSON對象的列表,然後像

<html> 
<body> 
    <div>...</div> 

    <script type="text/javascript"> 
    var list = { 
     <% foreach(var item in Model) { %> 
     { x:<%= item.X %>, Y:<%= item.Y %>, Z:<%= item.Z %> }, 
     <% } %> 
    }; 
    // or 
    var x = <%= Model.MySerializedJson %> 
    </script> 
</body> 
</html> 

或頁面已經被渲染後,你可以使用Ajax調用。

+1

感謝戴夫的答案。我以類似的能力評論了另一個答案,因爲我試圖將所有JS保留在外部文件中,而不是內嵌在