Как передать словарь из ajax в контроллер [duplicate]

15
задан ddd 5 January 2010 в 12:56
поделиться

3 ответа

Что-то вроде (javascript)

dict = new Object();
dict['12'] = 5;
dict['13'] = 6;
dict['1000'] = 21;
dict['9'] = 13;
dict['13'] = 48;

$.post('/client.mvc/mypostaction/', { myDictionary: dict });

Затем вы можете отправить объект dict на свой контроллер, используя тип свойства Dictionary<int, int> as.

ActionResult MyPostAction(Dictionary<string, int> myDictionary)

отредактировать из авторского кода второй раз:

Для меня работает следующее: Dictionary<string, int> kvPairs. <int, int> не собирается работать.

Сделайте свой пост наподобие:

var dict = new Object();
dict['13'] = 9;
dict['14'] = 10;
dict['2'] = 5;

$.post('controller.mvc/Test', { 'kvPairs': dict }, function(obj) { $('#output').html(obj.Count); }); 
19
ответ дан Jan Jongboom 23 August 2018 в 22:48
поделиться
  • 1
    При прохождении словаря, как вы предлагаете, я получаю нулевой объект. Я обновил свой вопрос, чтобы показать свой источник. благодаря – ddd 4 January 2010 в 18:19
  • 2
    Проверьте мое редактирование. – Jan Jongboom 4 January 2010 в 19:55
  • 3
    Теперь я попробовал словарь как строку, int и string, string. Изменено сообщение о том, как вы его перечислите, и оно по-прежнему не показывает никаких значений. Спасибо за помощь до сих пор. Я действительно не знаю, как еще получить эту работу – ddd 4 January 2010 в 19:55
  • 4
    Проверьте мое редактирование. Вы окружили словарные статьи с помощью '? – Jan Jongboom 6 January 2010 в 13:03
  • 5
    @JanJongboom, это тоже не сработало для меня, оно не находит метод. – Tito 17 September 2012 в 10:23

Клиент (JavaScript):

var dict = new Object();
dict.Key1 = "Value1"
dict.Key2 = "Value2"

$.post('/YourController/YourAction/', dict);

ПРИМЕЧАНИЕ. Объекты «dict» сериализуются за кулисами перед отправкой на ваше действие.

Сервер:

public ActionResult YourAction()
{
    string postData = string.Empty;
    using (StreamReader sr = new StreamReader(Request.InputStream))
    {
        postData = sr.ReadToEnd();
    }    

    //Load post data into JObject (Newtonsoft.Json)
    JObject o = JObject.Parse(postData);

    //Extract each key/val 
    string val1 = (string)o["Key1"];

    //Do whatever....
}
1
ответ дан LPL 23 August 2018 в 22:48
поделиться
  • 1
    Не могли бы вы написать запрос на получение? Я бы хотел протестировать его в плагине PostMan для chrome, поэтому мне нужно передать мои параметры в параметр dict – Vincent Ducroquet 15 June 2017 в 13:54

Объект JavaScript / словарь должен передаваться как список пар ключ-значение для ASP.NET MVC-контроллера, когда ожидается Dictionary<TKey, TValue>. Пример:

Если у вас есть такой словарь:

public Dictionary<string, decimal?> SomeMapping { get; set; }

, вы должны использовать что-то вроде этого в своем JavaScript:

var sourceMapping = { a: 1, b: 1.5, c: null };
var SomeMapping = [];
for (var key in sourceMapping) {
    if (sourceMapping.hasOwnProperty(key)) {
        SomeMapping.push({ Key: key, Value: sourceMapping[key] });
    }
}

I Этот метод использовался в асинхронном запросе POST (отправленном с использованием jQuery), который имел тип контента, установленный на 'application/json' (это может быть или не быть важным в вашем случае).

13
ответ дан mczers 23 August 2018 в 22:48
поделиться
  • 1
    Я пробовал все. Но только ваше решение сработало. так +1 к вам – Deb 12 July 2015 в 07:26
Другие вопросы по тегам:

Похожие вопросы: