如何通过Ajax向ASP.NET Core MVC控制器传递Dictionary<Guid,int>
ASP.NET Core中前端如何构造数据绑定后端
Dictionary<Guid, int>参数 现有代码
前端AJAX函数
reloadCartComponent() { $.ajax({ url: "Products/UpdateCart", data: { o: "Roman"//what type of object will be bound to Dictionary<Guid, int> on the controller's side }, success: function (data) { $("#summary").html(data); } }) }
后端Controller Action
public IActionResult UpdateCart(Dictionary<Guid, int> quantityDictionary = null) { return ViewComponent(typeof(CartComponent), quantityDictionary); }
数据绑定格式说明
要让ASP.NET Core正确将前端数据解析为Dictionary<Guid, int>类型参数,你可以按以下两种方式构造请求数据:
方式1:默认表单格式(URL编码)
保持jQuery AJAX默认的contentType: 'application/x-www-form-urlencoded',直接构造键为Guid字符串、值为数量的键值对即可,jQuery会自动转换为符合绑定要求的格式:
reloadCartComponent() { $.ajax({ url: "Products/UpdateCart", data: { // 示例:两个商品的Guid与对应数量 "3fa85f64-5717-4562-b3fc-2c963f66afa6": 2, "7b9e0b6a-1c4d-4f8a-9e7b-3c2d1e0f5a7c": 1 }, success: function (data) { $("#summary").html(data); } }) }
ASP.NET Core会自动将这些键值对映射为Dictionary<Guid, int>,其中Guid字符串会被自动转换为Guid类型,值对应整数数量。
方式2:JSON格式请求
如果想用JSON传递数据,需要修改请求的contentType并序列化数据,同时后端需要添加[FromBody]特性:
前端代码
reloadCartComponent() { const cartData = { "3fa85f64-5717-4562-b3fc-2c963f66afa6": 2, "7b9e0b6a-1c4d-4f8a-9e7b-3c2d1e0f5a7c": 1 }; $.ajax({ url: "Products/UpdateCart", type: "POST", // GET请求不支持复杂JSON,建议用POST contentType: "application/json", data: JSON.stringify(cartData), success: function (data) { $("#summary").html(data); } }) }
修改后的后端Action
public IActionResult UpdateCart([FromBody] Dictionary<Guid, int> quantityDictionary = null) { return ViewComponent(typeof(CartComponent), quantityDictionary); }
注意事项
- 传递的Guid字符串必须是标准有效格式(如带连字符的
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx),否则无法被解析为Guid类型,参数会变为null。 - GET请求仅支持方式1的表单格式,因为GET没有请求体,数据只能通过查询字符串传递;POST请求两种方式都兼容。
内容的提问来源于stack exchange,提问作者Yoda
相关产品推荐
相关产品推荐

