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

MVC框架下Ajax调用无法正确传递ViewModel至控制器问题

解决Ajax传递ViewModel到控制器后数据全为0的问题

问题根源

  1. 未设置contentType,服务器无法识别请求体为JSON格式,导致模型绑定失败
  2. data参数写法错误,没有以正确的键值对结构传递序列化后的ViewModel

修正后的Ajax代码

function summaryrpt() {     
    // 直接将页面Model序列化为JSON对象
    var viewModel = @Html.Raw(Json.Serialize(Model));
    
    $.ajax({
        type: "POST",
        // 使用Url.Action生成正确路由,避免硬编码
        url: '@Url.Action("ApproveSummaryReport", "Home")',
        // 关键:指定请求内容为JSON格式
        contentType: "application/json; charset=utf-8",
        dataType: 'JSON',
        // 将ViewModel包装成与控制器参数名匹配的结构,再序列化为字符串
        data: JSON.stringify({ model: viewModel })
    }).done(function (res) {
        // 此处处理返回结果
    });            
}

控制器端注意事项

  • 确保SummaryViewModel的所有需要绑定的属性为public访问修饰符
  • 类需包含无参构造函数(未自定义带参构造时默认存在)
  • 属性名称需与前端传递的JSON键名完全一致(C#是大小写敏感的)

错误写法说明

之前的data: model = '@Html.Raw(Json.Serialize(@Model))'属于语法错误,既没有形成合法的键值对结构,也未告知服务器请求数据格式,导致MVC模型绑定器无法解析数据,最终ViewModel的数值型属性默认被初始化为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:30:09