将字典从Ajax传递到C#代码背后

时间:2013-12-13 17:18:32

标签: c# jquery asp.net ajax

我正在使用ASP.Net和jquery / ajax

我在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)

有人可以告诉我我做错了什么,因为我已经尝试了我能想到的一切。 感谢

5 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:1)

看起来您正在尝试使用页面方法。如果是这样,您需要使用WebMethod属性

修饰您的方法(在代码后面)
[WebMethod]
public static void AddProductToDb(Dictionary <string, string> sizelist){}

然后确保使用jquery将json对象发布到正确的URL ...例如... PageName.aspx / AddProductToDb

如果您使用页面方法,那就是您所需要的一切

答案 2 :(得分: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>传递的信息,同时我能够传递其他参数。希望这能解决您的问题。

答案 3 :(得分:0)

我相信你需要将传统设置为true才能正确序列化

$.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);
   }
}

答案 4 :(得分:0)

请参考以下代码。确保您的方法“ AddProductToDB” 具有 HttpPost 属性和在这种情况下参数相同/相同的名称“ sizeList”

  

C#/ MVC /后端:

[{"TourDate": "23.01", "Nights": "7", "City": "\u0428\u0430\u0440\u043c-\u044d\u043b\u044c-\u0428\u0435\u0439\u0445", "Hotel": "ALBATROS AQUA BLU RESORT SHARM EL SHEIKH 4+ *", "Board": "AI", "Accomodation": "1 (18+)", "Price": "836", "Month": "01"}]
  

Javascript / jQuery /客户端:

然后输入 URL ,您可以在其中使用此功能/方法AddProductToDB。

例如“ YourController / AddProductToDB”。

[HttpPost]
public static void AddProductToDB(Dictionary<String, String> sizeList)
{

    //Business logic or Data

}