2012-06-15 52 views
13

我有型號URL編碼JavaScript對象字面

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

在javascript中我做的JavaScript對象字面模型:

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

這使得一個字符串,它看起來像如下:

"{"SomeText":"test"}" 

現在假設我想將這個模型發送給一個控制器,該控制器接受這樣的模型,並使用下面的函數於:

public void Index(SomeModel model) 
{ 
} 

我需要的是在該模型具有以下形式的URL字符串:

"?SomeText=test" 

我知道阿賈克斯正是這樣做的,當你通過AJAX郵寄型號:

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

'data:'url-編碼序列化的數據。

但我其實不想使用ajax,所以我需要自己構建這個url。我想要做與ajax與'data:'完全相同的事情。我如何可以自己對序列化數據進行網址編碼?

+0

查看http://api.jquery.com/jQuery.par am/ –

回答

33

你應該使用jQuery.param

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

陣列都OK太:

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

如果你需要傳統陣列的語法,使用第二個參數:

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

正是我需要的,謝謝,但我需要進一步檢查,因爲模型實際上包含一個列表... – JayAr

-2

要轉義單個值,Javascript具有功能escape。您必須提供自己的函數來遍歷對象,添加鍵等等。

編輯

Esailija是好心提醒我,escape不能正確處理一些常見的情況,並encodeURIComponent要好得多。如果你已經使用jQuery(你應該是),zzzzBov的答案更好。

+0

請勿使用'escape',請參閱http://stackoverflow.com/a/3608791/995876 – Esailija