2010-03-11 43 views
54

Trong trường hợp cụ thể của tôi, tôi có một vài giải pháp cho vấn đề của mình. Tôi muốn tìm ra cái nào khả thi hơn. Trong trường hợp này, tôi cũng có thể đạt được mục tiêu của mình bằng cách trả về một đối tượng JSON từ mã phía máy chủ của tôi; tuy nhiên, tôi không biết làm thế nào nó được thực hiện và cách tốt nhất để làm nó là gì.Trả về đối tượng JSON từ trang ASP.NET

Trước hết, tôi không cần trang aspx đầy đủ vì tôi chỉ cần trả lời từ mã. Vì vậy, tôi có sử dụng dịch vụ web, trình xử lý hoặc có cách nào khác để thực hiện việc này không?

Giải pháp này có khả thi không? Tôi có tạo chuỗi JSON bằng cách sử dụng lớp StringBuilder và tiêm chuỗi đó vào trang aspx mục tiêu không? Có bất kỳ biện pháp phòng ngừa hoặc những điều mà tôi cần phải nhận thức?

Tôi đánh giá cao ý tưởng của bạn.

Kính trọng,

Kemal

------------ CẬP NHẬT! ------------

Giả sử tôi có một đối tượng JSON trong trang userlist.aspx của tôi, mà sau đó tôi sử dụng với jQuery ...

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

Bây giờ khi tôi muốn thêm một mục trình đơn mới từ trang aspx của tôi, tôi phải làm gì ... Tôi nghĩ theo cách này, nhiệm vụ của tôi trên cụ thể hơn ...

Giả sử tôi tạo chuỗi mới trong mã aspx của mình, như vậy "{"value": "Blue"}. Làm thế nào để tôi đưa nó vào danh sách mục đã tồn tại trong trang mục tiêu? Hay đây không phải là cách tiếp cận chính xác cho tình huống này? Nếu không, làm thế nào khác có thể đạt được?

Ngoài ra, nếu tôi muốn kích hoạt sự kiện jQuery khi một mục mới được thêm vào danh sách này, điều này đạt được như thế nào?

------------ UPDATE 2 trên 26 Tháng tám 2015 ------------

Vào thời điểm tôi hỏi câu hỏi này, đường đi Tôi đã tiếp cận vấn đề ở khía cạnh khác. Bây giờ tôi thành thạo hơn về chủ đề này và có thể sẵn sàng chấp nhận câu trả lời được bình chọn nhiều nhất vì cách tiếp cận câu hỏi này rõ ràng không nên bao gồm JSON đã có và xuất một mã mới từ mã như @DavGarcia cũng gợi ý.

Trả lời

108

Trong Page_Load của bạn, bạn sẽ muốn hiểu rõ ràng đầu ra bình thường và viết của riêng bạn, ví dụ:

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

Để chuyển đổi đối tượng C# thành JSON, bạn có thể sử dụng thư viện như Json.NET.

Thay vì nhận trang .aspx của bạn để xuất JSON, hãy xem xét sử dụng Dịch vụ Web (asmx) hoặc WCF, cả hai đều có thể xuất JSON.

+0

ok Tôi đang cập nhật câu hỏi của mình. –

+1

Câu trả lời được cập nhật để bao gồm Response.End(), nếu không điều khiển trang có thể được hiển thị –

+0

Một trong những vấn đề chúng tôi phải đối mặt với cách tiếp cận này là - Nếu trang của bạn phức tạp và có nhiều điều khiển người dùng và giả sử một trang của bạn kiểm tra cookie và nếu nó không có mặt, hãy thử đặt nó. Điều này sẽ luôn xảy ra lỗi khi gửi 'Máy chủ không thể sửa đổi cookie sau khi tiêu đề HTTP đã được gửi' lỗi. –

11

không có vấn đề khi thực hiện nó với asp .... đó là cách tự nhiên nhất để làm như vậy với MVC, nhưng có thể được thực hiện với tiêu chuẩn asp là tốt.

Khung MVC có tất cả các loại lớp trợ giúp cho JSON chúng trong bối cảnh của asp.net.

chỉnh sửa:

đây là ví dụ về cách trả về dữ liệu JSON với MVC. Điều này sẽ ở trong lớp điều khiển của bạn. Điều này là ra khỏi chức năng hộp với MVC - khi bạn crate một dự án MVC mới công cụ này được tự động tạo ra vì vậy nó không có gì đặc biệt. Điều duy nhất mà tôi đang làm là trả về một actionResult là JSON Phương thức JSON mà tôi đang gọi là một phương thức trong lớp Controller.Đây là tất cả rất cơ bản, mặc định MVC thứ:

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

trở Dữ liệu này có thể được gọi thông qua JQuery như một cuộc gọi ajax thusly:

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

cảm ơn câu trả lời, tôi không sử dụng MVC nhưng sẽ tham gia vào nghiên cứu bắt đầu từ câu trả lời của bạn. Trong khi tôi làm điều đó, bạn có thể cung cấp cho tôi một số tài nguyên bạn đã biết, nếu có? –

11

Với ASP.NET trang web mà bạn có thể làm điều này trên một trang duy nhất như một ví dụ GET cơ bản (điều đơn giản nhất có thể có thể hoạt động.

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

Tôi đã phải xem xét điều này, vì vậy bất cứ ai khác không biết, rằng đối tượng Json là System.Web.Helpers.Json - Nếu bạn không tham khảo DLL đó, hoặc không thể, bạn có thể sử dụng System.Web.Script.Serialization.JavaScriptSerializer, hoạt động tương tự. – eselk

+0

@Scott - nếu bạn đang lặp qua một recordset trên một trang ASP.net duy nhất làm thế nào bạn nhóm chúng (chứ không phải là cá nhân như họ đang ở trong ví dụ của bạn)? – webdad3

0

Nếu bạn lấy mã phía sau, sử dụng một số kiểu như thế này

 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(); 

Vì vậy, bạn trả lại một đối tượng json được tuần tự hóa với tất cả các thuộc tính của MyCustomObject.

Các vấn đề liên quan