2010-03-11 85 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的所有属性进行序列化。