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

为什么通过AJAX传递到.NET Core控制器的所有数值都为0而非输入值?

问题修复方案

1. 修复AJAX语法错误

你当前JS代码存在两处低级语法问题:

  • 重复声明了success回调,后声明的会覆盖前者,导致原有DOM更新逻辑不执行
  • beforesend大小写错误,正确写法为beforeSend(S大写)

修正后的JS代码如下:

$(document).ready(function() {
  $("#calculate_btn").click(function() {
    // 先打印取值确认前端能拿到正确输入
    console.log('product_no:', $("#controller_pro_no").val());
    console.log('insured_pro:', $("#controller_ins").val());
    console.log('pro_durate_m:', $("#controller_pro_durate_m").val());

    $.ajax({
      type: "Post",
      url: '@Url.Action("mylist","users")',
      data: JSON.stringify({
        values: { // 外层加values对应后端cost_info参数名
          product_no: $("#controller_pro_no").val(),
          insured_pro: $("#controller_ins").val(),
          pro_durate_m: $("#controller_pro_durate_m").val(),
        },
        u: {} // 预留user参数位置
      }),
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      processData: false,
      success: function(mdata) {
        $("#fade1").hide();
        $("#modal").hide();
        $("#calculated_param").css('display', 'block');
        for (var n in mdata) {
          $("#product_index").text(JSON.stringify(n.product_index));
          $("#income_sell_pr_fertilizer").text(JSON.stringify(n.income_sell_pr_fertilizer));
          $("#net_profit_all").text(JSON.stringify(n.net_profit_all));
        }
      },
      beforeSend: function() {
        $("#fade1").show();
        $("#modal").show();
      },
    });
  });
});

2. 修复后端参数绑定逻辑

.NET Core 接收application/json类型的POST请求时,默认只能有一个参数标记[FromBody],且请求JSON结构必须和接收模型完全匹配,否则会绑定失败取默认值0。

步骤1:新增统一接收视图模型

public class MyListRequest
{
    public cost_info values { get; set; }
    public user u { get; set; }
}

步骤2:修正控制器Action代码

注意修复拼写错误JasonRequestBehavoir→JsonRequestBehavior,并加[FromBody]标记:

[HttpPost]
public IActionResult mylist([FromBody] MyListRequest request)
{
    blmodel bluser = new blmodel();
    request.u.username = Request.Cookies["username"];
    var para = bluser.mylist(request.values, request.u);
    return Json(para, JsonRequestBehavior.AllowGet);
}

3. 补充检查项

  • 确认HTML中存在id为controller_ins、controller_pro_durate_m的输入框,否则取值为空绑定到数值类型会默认是0
  • 确认cost_info类的属性名和前端传递的三个属性名完全一致,且属性为可写的public属性

内容的提问来源于stack exchange,提问作者Hamed Zahiri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:24:04