MVC框架下Ajax调用无法正确传递ViewModel至控制器问题
解决Ajax传递ViewModel到控制器后数据全为0的问题
问题根源
- 未设置
contentType,服务器无法识别请求体为JSON格式,导致模型绑定失败 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
相关产品推荐
相关产品推荐

