如何通过Ajax向分部视图控制器方法传递ID并解决参数为空问题
问题根本原因
你当前的AJAX请求以application/json格式提交JSON数据,但ASP.NET Core默认不会从POST请求的Body中解析简单类型参数(比如string类型的id),必须显式配置才能读取,所以控制器拿到的id是null。
你直接在地址栏访问是GET请求,参数走路由绑定,所以可以正常拿到值,和当前POST请求的绑定逻辑不同。
解决方案(二选一即可)
方案1:修改AJAX请求代码(推荐,改动最小)
不需要序列化JSON,直接传递JS对象,让jQuery默认以application/x-www-form-urlencoded格式提交,控制器可以直接绑定参数:
$(function () { setInterval(RefreshAgenda, 3000); }); function RefreshAgenda() { var data = {"id":"@Model.Id"}; $.ajax({ type: "POST", url: "/Meetings/AgendaPartial", data: data, dataType: "html", success: function (response) { $('#_Agenda').html(response); } }); }
方案2:修改后端绑定逻辑,保留JSON提交方式
如果确实需要保留JSON提交的逻辑,有两种改法可选:
- 方式A:给控制器参数加
[FromBody]注解,同时把AJAX请求的data直接改为id值,不需要外层对象:// AJAX部分修改 data: JSON.stringify("@Model.Id"),// 控制器部分修改 [HttpPost] public async Task<IActionResult> AgendaPartial([FromBody] string id) - 方式B:定义简单的接收模型,用对象接收JSON参数:
// 新增模型类 public class AgendaRequest { public string Id { get; set; } } // 控制器部分修改 [HttpPost] public async Task<IActionResult> AgendaPartial([FromBody] AgendaRequest request) { string id = request.Id; // 原有逻辑不变 }
内容的提问来源于stack exchange,提问作者Stian
相关产品推荐
相关产品推荐

