2013-12-13 7 views
0

Я использую ASP.NET и JQuery/AjaxPass словарь С Аяксом C# Codebehind

У меня есть следующий сценарий в JQuery:

var sizes = []; 
sizes.push({ key: "1", value: "3"}); 
$.ajax({ 
    type: "POST", 
    url: pageUrl, 
    data: '{"sizeList":' + sizes + '}', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (msg) { 
     alert("success"); 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert("Status: " + textStatus); alert("Error: " + errorThrown); 
    } 
} 

Это отделенный код:

public static void AddProductToDB(Dictionary<String, String> sizeList) 

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно, поскольку я пробовал все, что мог придумать. Благодаря

+0

что именно вы возникли проблемы с? Какие ошибки и т. Д. Вы получаете? – Liam

+0

Я получаю 500 внутренних ошибок сервера, но он все еще не идет в методе codebehind, а также метод пуст на данный момент. Спасибо –

+0

Я предполагаю, что у вас есть другие сообщения ajax? – Liam

ответ

2
var param = { 
    '[0].Key': '1', 
    '[0].Value': '3' 
}; 

$.ajax({ 
    type: "POST", 
    url: pageUrl, 
    data: param 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (msg) { 
     alert("success"); 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert("Status: " + textStatus); alert("Error: " + errorThrown); 
    } 
} 
+0

Я пробовал так, но это все равно дал мне ту же ошибку. Спасибо –

0

Похоже, вы пытаетесь использовать метод страницы. Если да, то вам нужно украсить свой метод (в коде позади) с атрибутом WebMethod

[WebMethod] 
public static void AddProductToDb(Dictionary <string, string> sizelist){} 

Затем убедитесь, что вы отправляете объект JSON с JQuery на правильный URL ... например ... PageName. ASPX/AddProductToDb

это все, что вам нужно, если вы используете методы страницы

+0

Привет мой метод уже имеет эту спецификацию, поскольку другие методы ajax работают, проблема заключается в том, что я пытаюсь передать словарь в качестве параметра –

+0

Получил его. Вы отправляете объект с свойством (sizelist), который является массивом, однако метод страницы ожидает словаря. Что вам нужно сделать, так это создать объект в вашем коде позади с свойством sizelist, которое представляет собой массив строк. Затем украсьте этот объект атрибутом DataContract и его атрибутом с атрибутом DataMember. Это должно сделать работу – Leo

0

Я смотрю на это два года после того, как он получил отвечал, но, надеюсь, это поможет кому-то, если они натыкаются на этот пост. Я использовал базу ответа Damith, чтобы сформировать в использовать параметры я собирался пройти и получил его на работу, передавая их следующим образом:

var param = { 
    'filters[0].Key': '1', 
    'filters[0].Value': 'test', 
    'filters[1].Key': '2', 
    'filters[1].Value': 'test', 
    id: 1, 
    width: 150, 
    height: 150, 
}; 

Тогда на коде MVC у меня был свой метод со следующей подписью:

public async Task<ActionResult> IndexPartial(int id = -1, int? width = null, int? height = null, Dictionary<string, string> filters = null) 

с помощью этих двух вещей, которые я был в состоянии иметь метод обнаружения информацию, переданную в качестве Dictionary<string,string> и в то же время я был в состоянии передать дополнительные параметры. Надеюсь, это решит вашу проблему.

0

Я считаю, что вам нужно установить традиционную истину так будет сериализовать правильно

$.ajax({ 
    type: "POST", 
    url: pageUrl, 
    traditional: true, 
    data: '{"sizeList":' + sizes + '}', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (msg) { 
     alert("success"); 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert("Status: " + textStatus); alert("Error: " + errorThrown); 
    } 
} 
Смежные вопросы