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"

モデルをajaxpost経由で送信すると、ajaxがまさにこれを実行することを私は知っています。

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

'data:'url-シリアル化されたデータをエンコードします。

しかし、私は実際にはajaxを使いたくないので、このURLを自分で作成する必要があります。ajaxが「data:」で行うのとまったく同じことをしたいと思います。シリアル化されたデータを自分でURLエンコードするにはどうすればよいですか?

4

2 に答える 2

34

使用する必要があります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

従来の配列構文が必要な場合は、2 番目のパラメーターを使用します。

$.param({foo:['bar','baz']}, true);
//produces foo=bar&foo=baz
于 2012-06-15T15:51:05.667 に答える
-2

単一の値をエスケープするために、Javascript には関数がありますescape。オブジェクトを反復処理したり、キーを追加したりするには、独自の関数を提供する必要があります。

編集

escapeEsailja は親切にも、多くの一般的なケースを適切に処理できず、はるかに優れていることを思い出させてくれencodeURIComponentます。すでに jQuery を使用している場合 (そして使用する必要があります)、zzzzBov の回答はさらに優れています。

于 2012-06-15T15:49:59.030 に答える