Я желаю передать словарь типа <int,int>
к моему контроллеру с помощью сообщения Ajax. Главной причиной здесь является сообщение, может иметь между 1-3 парами значения ключа здесь (ни одно из этих значений не известно во время компиляции), и в будущем это может подойти 5.
Также в сообщении я должен передать в некоторых других данных, таких как идентификатор и имя, который все работы как нормальные.
Как я создал бы этот словарь в JavaScript, затем отправляют, он с помощью JQuery отправляет и наконец получает его на контроллере для обработки?
Редактирование 2: Я решил просто решить это с сообщением для каждого значения вместо того, чтобы пытаться передать словарь.
Править: Вот мой источник для функции, таким образом, Вы видите то, что я пробую:
function BindAddMenuItem() {
$(".AddMenuItem").click(function (e) {
e.preventDefault();
//get header id from link by removing addmenuitem from this.id
var currentId = $(this).attr("id").replace("AddMenuItem", "");
//get itemnumber, itemname, itemdetails from textboxes with same header id
var restaurantId = jQuery.trim($("#RestaurantId").val());
var itemNumber = jQuery.trim($("#ItemNumber" + currentId).val());
var itemName = jQuery.trim($("#ItemName" + currentId).val());
var itemDetails = jQuery.trim($("#ItemDetails" + currentId).val());
var costs = new Object();
//select all textboxes with class "Header" + currentId
$(".Header" + currentId).each(function (i) {
var optionId = $(this).attr("id").replace("Option", "");
costs[optionId] = $(this).val();
});
$.ajax(
{
type: "POST",
url: "/Menu/AddMenuItem",
data: "reastaurantId=" + restaurantId + "&menuHeaderId=" + currentId + "&itemNumber=" + itemNumber + "&itemName=" + itemName + "&itemDetails=" + itemDetails + "&costs=" + costs,
dataType: "html",
success: function (result) {
var domElement = $(result);
$("#MenuContainer").replaceWith(domElement);
var newNum = parseInt(itemNumber) + 1;
$("#ItemNumber" + currentId).val(newNum);
BindAllBehaviours();
}
});
});
}
]Клиент (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) [
] [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[
] можно поместить на контроллер, используя [] словарь
] в качестве типа свойства.[
ActionResult MyPostAction(Dictionary<string, int> myDictionary)
]
[] редактирование из авторского кода во второй раз:[
] [] При наличии [] словаря<стринг, int> kvPairs[
] для меня работает следующее. []
] все-таки не будет работать.[
] Сделай свой пост как: [
] [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); });
]