You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:15:42