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

ASP.NET Core MVC Ajax无法正确传值,选中地址ID返回0怎么解决?

问题根因

  • 按钮data-url属性是页面首次渲染时由服务端生成的,此时selectedShippingAddress.IntShippingAddressId初始值为0,用户后续修改下拉框选中值不会更新这个静态的url参数。
  • 表单序列化后生成的字段名为selectedShippingAddress.IntShippingAddressId,但CheckoutChanges接口接收的参数名为intShippingAddressID,二者名称不匹配,ASP.NET Core模型绑定无法将值映射到接口参数,因此接口拿到的永远是int类型的默认值0。
  • CheckoutChanges方法的逻辑存在问题:就算拿到了正确的地址ID,你也没有把传入的ID赋值给缓存中的模型,直接用模型原有值查询,依然无法正确更新缓存的地址信息。

修复步骤

第一步:修正接口参数和逻辑

调整CheckoutChanges方法,直接接收表单序列化后的模型,同时更新缓存逻辑:

[HttpGet]
public ActionResult CheckoutChanges(CheckoutModel model)
{
    int addressId = model.selectedShippingAddress.IntShippingAddressId;
    if (addressId == 0)
        return View();
    bool AlreadyExists = memoryCache.TryGetValue<CheckoutModel>("CachedModel", out var cachedModel);
    if (AlreadyExists)
    {
        // 用传入的地址ID查询地址信息,更新缓存模型
        cachedModel.selectedShippingAddress = context.TwebShippingAddresses.FirstOrDefault(x => x.IntShippingAddressId == addressId);
        var cachEntryOptions = new MemoryCacheEntryOptions()
            .SetSlidingExpiration(TimeSpan.FromSeconds(20));
        memoryCache.Set("CachedModel", cachedModel, cachEntryOptions);
    }
    return View();
}

第二步:移除按钮data-url里的冗余参数

data-url不需要拼接静态的地址ID,表单序列化已经会传递当前选中的地址值:

<button type="button" class="btn btn-primary" data-ajax-method="get" data-toggle="ajax-modal" data-target="#ValidateAddress"
        data-url="@Url.Action("CheckoutChanges")">Verify Address</button>

可选简化方案

如果不需要序列化全量表单,也可以在js里动态获取下拉框当前选中值拼接url,省略表单序列化逻辑:

$(function () {
    $('button[data-toggle="ajax-modal"]').click(function (event) {
        event.preventDefault();
        var selectVal = $('select[name="selectedShippingAddress.IntShippingAddressId"]').val();
        var url = '@Url.Action("CheckoutChanges")?intShippingAddressID=' + selectVal;
        $.get(url).done(function (data) {
            PlaceHolderElement.html(data);
        })
    })
})

内容的提问来源于stack exchange,提问作者Scott Uphus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:39:00