2012-06-20 57 views
7

Tôi là một chút mới với C# và javascript vì vậy trong khi câu hỏi của tôi là cụ thể, tôi mở cho bất kỳ lựa chọn thay thế nào.Gửi một mảng javascript để mã sau (C#) bằng cách sử dụng ajax

Tôi có một loạt các giá trị (mà tôi đã tạo trong một hàm javascript) mà tôi muốn gửi tới tệp mã-đằng sau của mình để được sử dụng trong một phương thức. Từ những gì tôi đã nghiên cứu bằng cách sử dụng ajax và xâu chuỗi mảng bằng JSON có vẻ giống như phương pháp tốt nhất.

Câu hỏi của tôi là

  1. Tôi có thể vượt qua các mảng sử dụng phương pháp này?

  2. Làm thế nào để nắm bắt được thông tin về phía máy chủ (trong tôi code-behind?)

Javascript qua các giá trị

var jsonvalues = JSON.stringify(values); 
var callback = window.location.href 
$.ajax({ 
    url: callback 
    type: "POST", 
    contentType: 'application/json', 
    data: jsonvalues 
}); 

Tôi đã nhìn thấy nhiều giải pháp sử dụng [WebMethod ] hoặc một số loại dịch vụ WebService để nắm bắt dữ liệu, tôi có thể sử dụng điều này để làm việc trong tệp mã-đằng sau của mình mà không phải trả lại dữ liệu không?

Dưới đây là những gì tôi đang sử dụng trên của tôi code-behind tập tin

[WebMethod] 
public static void done(string[] ids) 
{ 
String[] a = ids; 
} 
+0

Cảm ơn! Sau khi đưa ra câu hỏi của tôi, nó trở nên rõ ràng rằng đây là một thành phần quan trọng. Tôi sẽ thử và sử dụng câu trả lời của Milimetric bằng cách sử dụng '[HttpPost]' đầu tiên. –

+0

Tôi vẫn không biết cách xử lý cuộc gọi ở mặt sau mã. Tôi đã cố gắng viết một phương pháp để nắm bắt mảng nhưng tôi tiếp tục nhận được một lỗi với các cuộc gọi ajax. Tôi đã thêm phương pháp mã-đằng sau của mình vào câu hỏi gốc –

+0

Hãy xem câu hỏi này [Jquery AJAX với ASP.NET WebMethod Returning Entire Page] (http://stackoverflow.com/questions/348689/jquery-ajax -with-asp-net-webmethod-return-toàn bộ trang). Bỏ qua phần về việc trả về các công cụ và xem chúng đang xây dựng 'url' như thế nào. – R0MANARMY

Trả lời

4

Tôi đã viết một ví dụ chuyên sâu về điều này bằng cách sử dụng ASP.NET MVC, nhưng nó có thể dễ dàng được điều chỉnh cho WebForms.

Send data with jquery to an MVC controller

HTML và jQuery sẽ nhìn gần như giống hệt nhau, ngoại trừ nơi bạn gọi WebMethod.

Nếu trang bạn đang sử dụng được gọi là Default.aspx và phương thức được gọi là Done, thì URL của bạn cho WebMethod sẽ là Default.aspx/Done.

<script> 
     // Grab the information 
     var values = {"1,","2","3"}; 
     var theIds = JSON.stringify(values); 

     // Make the ajax call 
     $.ajax({ 
     type: "POST", 
     url: "Default.aspx/Done", // the method we are calling 
     contentType: "application/json; charset=utf-8", 
     data: {ids: theIds }, 
     dataType: "json", 
     success: function (result) { 
      alert('Yay! It worked!');    
     }, 
     error: function (result) { 
      alert('Oh no :('); 
     } 
    }); 
    </script> 

WebMethod của bạn sẽ vẫn giữ nguyên.

[WebMethod] 
public static void done(string[] ids) 
{ 
    String[] a = ids; 
    // Do whatever processing you want 
    // However, you cannot access server controls 
    // in a static web method. 
} 
0

Cách đơn giản nhất là sử dụng ASP.NET MVC và dữ liệu ràng buộc vào một danh sách. Vì vậy, đối với một danh sách các chuỗi, điều này sẽ rất dễ dàng. Chỉ cần làm một hành động điều khiển trông giống như thế này:

[HttpPost] 
public ActionResult MyAction(string[] values) 
{ 
    ... debug and see that values gets set to your array from javascript ... 
} 

và sau đó vượt qua data: values trong $.ajax cuộc gọi của bạn. Không cần phải xâu chuỗi, jQuery sẽ tìm ra điều cần làm. Đối với các ràng buộc danh sách phức tạp hơn, kiểm tra này (và nhiều tài nguyên khác như nó nói về cách ưa thích để ràng buộc vào các danh sách đối tượng phức tạp):

http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

cho gọi [WebMethod] phương pháp từ các trang web hoặc các dịch vụ web, kiểm tra hướng dẫn này:

http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

về cơ bản mặc dù bạn cần url là ServicePage.aspx/MethodName

+0

Tôi vẫn cần phải chỉ định contenttype trong lệnh '$ .ajax' sau đó? Tôi có nên sử dụng' processData: false' cho Gọi là? –

+0

Tôi thường liên kết những thứ được đánh máy mạnh mẽ để tôi thiết lập các biểu mẫu và đăng tải chúng. Trong trường hợp của tôi, tôi thậm chí không cần sử dụng $ .ajax, tôi chỉ sử dụng $ .post Đây là lời khuyên tốt nhất tôi có thể cung cấp cho bạn. Thiết lập nó như thế nào bạn có và đặt một breakpoint trong hành động điều khiển tôi đã trình bày ở trên. Sau đó, nhìn vào Request objec t và xem thông số nào đang được truyền vào. Về cơ bản, bạn muốn có tham số được gọi là "giá trị" để có danh sách được phân cách bằng dấu phẩy. Sau đó bạn có thể chỉnh sửa jQuery của bạn để chính xác những gì bạn cần. – Milimetric

+0

Cảm ơn tất cả sự giúp đỡ của bạn! Tuy nhiên tôi vừa phát hiện ra nền tảng mà tôi đang xây dựng (Sitecore) chưa hỗ trợ MVC (một bản phát hành sẽ ra mắt vào cuối tháng này) Tôi đang cố gắng sử dụng '[WebMethod] 'như đã đề cập bởi @ R0MANARMY thay cho điều này nhưng không thể nhận được cuộc gọi 'ajax' của tôi để kích hoạt phương pháp tôi đã viết. Tôi đã sửa đổi các cuộc gọi ajax để nói 'url: 'Đăng ký/kích hoạt'' nơi kích hoạt là phương pháp trong gọi lại của tôi. Tui bỏ lỡ điều gì vậy? Một lần nữa, cảm ơn tất cả sự giúp đỡ! –

-1

Đặt dữ liệu của bạn trong một HID den trường với runat = server. Đăng biểu mẫu và tìm nạp dữ liệu bình thường.

+0

Đó không phải là tuyến đường an toàn nhất để đi, tôi khuyên bạn nên tránh . –

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