JQuery пост к действию с параметром словаря - PullRequest
6 голосов
/ 08 августа 2011

Я чувствую себя дежавю, но не могу найти ответ на этот вопрос: у меня есть массив объектов, который должен выглядеть следующим образом при проверке вызова jQ $ .post:

limiter[0].Key
limiter[0].Value

, чтобы онотображается в действии

public ActionResult SomeAction(Dictionary<Guid, string> dictionary) { }

Однако этот javascript:

// Some Guid and Some Value
var param = [ { 'Key' : '00000000-0000-00000-000000', 'Value': 'someValue' } ];

$.post('/SomeController/SomeAction/',
       {
       dictionary: limiter,
       otherPostData: data
       },
       function(data) {
          callback(data);
       }
)

производит это при проверке в firebug:

limiter[0][Key] = someKey // Guid Value
limiter[0][Value] = someValue

Это в jq 1.40,2.Кажется, я помню какой-то флаг, который нужно установить, чтобы рендерить json по-другому в jQ.Это звонит в какие-нибудь колокола?

Ответы [ 5 ]

5 голосов
/ 08 августа 2011

Попробуйте вот так:

var param = {
    '[0].Key': '28fff84a-76ad-4bf6-bc6d-aea4a30869b1', 
    '[0].Value': 'someValue 1',

    '[1].Key': 'd29fdac3-5879-439d-80a8-10fe4bb97b18', 
    '[1].Value': 'someValue 2',

    'otherPostData': 'some other data'
};

$.ajax({
    url: '/Home/SomeAction/',
    type: 'POST',
    data: param,
    success: function (data) {
        alert(data);
    }
});

должно соответствовать следующему действию контроллера:

public ActionResult SomeAction(Dictionary<Guid, string> dictionary, string otherPostData) 
{ 
    ...
}
3 голосов
/ 28 марта 2017
var dict = {}
dict["key1"] = 1
dict["key2"] = 2
dict["key3"] = 3

$.ajax({
        type: "POST",
        url: "/File/Import",
        data: dict,
        dataType: "json"
});

public void Import(Dictionary<string, int?> dict)
{
}

просто отправьте ваш объект в качестве dataType: "json"

1 голос
/ 08 августа 2011

Вы можете использовать этот флаг -

jQuery.ajaxSetting.traditional = true;

Чтобы jQuery разместил данные в другом формате, который вы видите. См. Этот вопрос для получения дополнительной информации -

Передача массивов в вызове ajax с использованием jQuery 1.4

0 голосов
/ 13 мая 2013

Вы также можете использовать список объектов, и результат будет таким же, как вы хотели. Это хороший пример.

http://www.mikesdotnetting.com/Article/96/Handling-JSON-Arrays-returned-from-ASP.NET-Web-Services-with-jQuery

0 голосов
/ 08 августа 2011

Параметр post будет отображаться как limiter[0][Key], поскольку jquery сериализует данные json до их публикации.Это очень хорошо интерпретируется действием контроллера, и вы получаете необходимый ввод в действии.

...