我有模特
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 post发送模型时,ajax就是这样做的:
$.ajax({type:"POST",
url: "someUrl",
data: serializedData,
...
});
'data:'对序列化数据进行url编码。
但我实际上不想使用ajax,所以我需要自己构建这个url。我想做与ajax对'data:'完全相同的事情。我如何自己对序列化数据进行url编码?
答案 0 :(得分:34)
您应该使用jQuery.param
:
$.param({foo:'bar', fizz:'buzz'});
//produces foo=bar&fizz=buzz
阵列也可以:
$.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
答案 1 :(得分:-2)
要转义单个值,Javascript具有函数escape
。您必须提供自己的函数来遍历对象,添加键等等。
修改强>
Esailija非常友好地提醒我escape
没有正确处理许多常见案例,encodeURIComponent
要好得多。如果你已经在使用jQuery(你应该这样做),那么zzzzBov的答案会更好。