2010-03-11 129 views
54

在我的特殊情況下,我有幾個解決方案來解決我的問題。我想找出哪一個更可行。在這種情況下,我也可以通過從服務器端代碼返回一個JSON對象來實現我的目標;但是,我不知道它是如何完成的,以及實現它的最佳方式是什麼。從ASP.NET頁面返回JSON對象

首先,我不需要一個完整的aspx頁面,因爲我只需要從代碼返回的響應。那麼,我是否會使用Web服務,處理程序,還是有其他特定的方法來執行此操作?

該解決方案是否可行?我是否使用StringBuilder類構建JSON字符串並將該字符串注入到目標aspx頁面?我應該注意哪些預防措施或事項?

我很欣賞你的想法。

問候,

末爾

------------ UPDATE!------------

假設我有JSON對象在我userlist.aspx頁面,然後我用jQuery使用...

{"menu": { 
    "id": "color1", 
    "value": "color", 
    "popup": { 
    "menuitem": [ 
     {"value": "Red"}, 
     {"value": "Green"}, 
     {"value": "Yellow"} 
    ] 
    } 
}} // example taken from the json.org/example page 

現在,當我要添加從我的aspx頁面新的菜單項,我該怎麼辦?我想這樣我的questi在更具體的...

讓我們假設我在我的aspx代碼中創建一個新的字符串,如"{"value": "Blue"}。我如何將其注入到目標頁面中已有的項目列表中?或者這是不是這種情況的正確方法?如果不是的話,還有什麼可以實現的呢?另外,如果我想在一個新項目添加到這個列表中時激發一個jQuery事件,那麼這是如何實現的?

------------ 26 UPDATE 2015年8月2日------------

當我問到這個問題時,辦法我接近這個問題的另一方面。我現在更加精通這個主題,並且很樂意接受最多的投票回答,因爲對這個問題的處理方式顯然不應該包括已經存在的JSON並且從代碼中輸出一個新的代碼,如@DavGarcia也暗示的那樣。

回答

108

在你的Page_Load你將要清除出正常輸出寫你自己的,例如:

string json = "{\"name\":\"Joe\"}"; 
Response.Clear(); 
Response.ContentType = "application/json; charset=utf-8"; 
Response.Write(json); 
Response.End(); 

要轉換一個C#對象爲JSON,你可以使用庫如Json.NET

不要讓您的.aspx頁面輸出JSON,而是考慮使用Web Service(asmx)或WCF,它們都可以輸出JSON。

+0

好的我正在更新我的問題。 – 2010-03-11 07:30:28

+1

已包含Response.End()的更新答案,否則可能會呈現頁面控件 – 2012-01-05 15:32:01

+0

我們遇到這種方法時遇到的問題之一是 - 如果您的頁面很複雜並且有多個用戶控件,並且假設您的一個頁面檢查cookie如果它不存在,則嘗試設置它。這將始終錯誤地拋出'服務器無法修改HTTP頭後發送'Cookie錯誤。 – 2013-07-01 09:30:42

11

用asp做它沒有問題....用MVC這樣做是最自然的,但也可以用標準的asp來完成。如果可以的話,我會建議在某些MVC-love中使用suss,否則,你可能很容易就得到MVC使用的JSON幫助類並使用它們他們在asp.net的上下文中。

編輯:

這裏有一個如何使用MVC返回JSON數據的示例。這將在你的控制器類中。這是MVC開箱即用的功能 - 當你創建一個新的MVC項目時,這些東西會被自動創建,所以沒什麼特別的。我唯一要做的就是返回一個JSON actionResult,我調用的JSON方法是Controller類中的一個方法。這是非常基本的,默認MVC的東西:

public ActionResult GetData() 
{ 
    data = new { Name="kevin", Age=40 }; 
    return Json(data, JsonRequestBehavior.AllowGet); 
} 

這回的數據可以通過JQuery被稱爲Ajax調用正是如此:

$.get("/Reader/GetData/", function(data) { someJavacriptMethodOnData(data); }); 
+2

謝謝你的回答,我沒有使用MVC,但會從你的答案開始研究。雖然我這樣做,你能否爲我提供一些你已經知道的資源,如果有的話? – 2010-03-11 06:38:59

11

在ASP.NET網頁,你可以在一個頁面上做到這一點作爲一個基本的GET例子(最簡單的可能的事情,可以工作

var json = Json.Encode(new { 
    orientation = Cache["orientation"], 
    alerted = Cache["alerted"] as bool?, 
    since = Cache["since"] as DateTime? 
}); 
Response.Write(json); 
+3

我不得不看這個,所以任何人都不知道,那個Json對象是System.Web.Helpers.Json - 如果你不會引用該DLL已經或者不能,你可以使用System.Web.Script.Serialization.JavaScriptSerializer,它的工作原理大致相同。 – eselk 2013-02-08 23:20:22

+0

@Scott - 如果你正在循環訪問一個ASP.net頁面的記錄集,你將如何對它們進行分組(而不是像你的例子中的個人)? – webdad3 2013-09-09 19:19:47

0

如果你得到的代碼背後,像這樣使用一些

 MyCustomObject myObject = new MyCustomObject(); 
     myObject.name='try'; 
     //OBJECT -> JSON 
     var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
     string myObjectJson = javaScriptSerializer.Serialize(myObject); 
     //return JSON 
     Response.Clear();  
     Response.ContentType = "application/json; charset=utf-8"; 
     Response.Write(myObjectJson); 
     Response.End(); 

所以,你返回一個json對象,它使用MyCustomObject的所有屬性進行序列化。