Что-то вроде (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); });
Клиент (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....
}
Объект 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'
(это может быть или не быть важным в вашем случае).
'
? – Jan Jongboom 6 January 2010 в 13:03