2012-06-15 33 views
13

Tôi có mẫuUrl Mã hóa JavaScript Object đen

public class SomeModel 
{ 
    public string SomeText { get; set; } 
} 

Trong javascript Tôi làm cho một đối tượng javascript của mô hình:

var model = { 
       SomeText: "test" 
      }; 
var serializedData = JSON.stringify(model); 

Điều này làm cho một chuỗi trông giống như sau:

"{"SomeText":"test"}" 

Bây giờ giả sử tôi muốn gửi mô hình này đến một bộ điều khiển chấp nhận một mô hình như thế này với functi sau vào lúc:

public void Index(SomeModel model) 
{ 
} 

Những gì tôi cần là một chuỗi url trong đó mô hình có dạng sau:

"?SomeText=test" 

Tôi biết rằng ajax không chính xác này khi bạn gửi mẫu qua đường bưu ajax:

$.ajax({type:"POST", 
     url: "someUrl", 
     data: serializedData, 
     ... 
}); 

Url dữ liệu: 'mã hóa dữ liệu được tuần tự hóa.

Nhưng tôi thực sự không muốn sử dụng ajax, vì vậy tôi cần phải tự xây dựng url này. Tôi muốn làm chính xác điều tương tự như ajax với 'data:'. Làm thế nào tôi có thể mã hóa url dữ liệu được tuần tự hóa?

+0

Xem http://api.jquery.com/jQuery.par am/ –

Trả lời

33

Bạn nên sử dụng jQuery.param:

$.param({foo:'bar', fizz:'buzz'}); 
//produces foo=bar&fizz=buzz 

Mảng là ok quá:

$.param({foo:['bar', 'baz']}); 
//produces foo%5B%5D=bar&foo%5B%5D=baz 
//which is the url encoded form of: foo[]=bar&foo[]=baz 

nếu bạn cần cú pháp mảng truyền thống, sử dụng tham số thứ hai:

$.param({foo:['bar','baz']}, true); 
//produces foo=bar&foo=baz 
+0

Chính xác những gì tôi cần, cảm ơn bạn, nhưng tôi cần phải kiểm tra thêm vì mô hình chứa danh sách thực sự ... – JayAr

-2

Để thoát khỏi một giá trị duy nhất, Javascript có chức năng escape. Bạn phải cung cấp chức năng của riêng bạn để lặp qua đối tượng, thêm các phím, v.v.

EDIT

Esailija là loại, đủ để nhắc nhở tôi rằng escape không xử lý nhiều trường hợp phổ biến đúng cách, và encodeURIComponent là tốt hơn nhiều. Nếu bạn đã sử dụng jQuery (và bạn nên có), câu trả lời của zzzzBov vẫn tốt hơn.

+0

Không sử dụng 'thoát', xem http://stackoverflow.com/a/3608791/995876 – Esailija