13

我有模特

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 对“数据:”所做的完全相同的事情。如何自己对序列化数据进行 url 编码?

4

2 回答 2

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
于 2012-06-15T15:51:05.667 回答
-2

为了转义单个值,Javascript 具有函数escape. 您必须提供自己的函数来遍历对象、添加键等等。

编辑

Esailija 好心提醒我,escape很多常见的情况都处理不好,而且encodeURIComponent好多了。如果您已经在使用 jQuery(并且您应该使用),那么 zzzzBov 的答案会更好。

于 2012-06-15T15:49:59.030 回答