C# ASP.NET MVC:.cshtml中Ajax无法向控制器传递数据
问题排查与解决
核心问题:Action方法名拼写错误
你的Ajax请求指向的Action是BulkParcelStatusUpdateSave,但控制器中定义的方法名是BuldParcelStatusUpdateSave(单词Bulk被误写为Buld,少了一个字母l)。这会导致请求找不到对应的Action方法,直接触发404错误,进入Ajax的error回调。
其他潜在问题及验证点
- 参数绑定验证:当前Ajax设置了
contentType: "application/json; charset=utf-8"且用JSON.stringify(obj)传递数据,这个配置符合ASP.NET模型绑定JSON数组的要求,修复方法名后应该能正常绑定到List<ParcelBulkUpdateSaveModel>。 - 返回值处理:控制器返回空字符串,而success回调中执行
data.split("|")虽不会直接报错,但如果后续逻辑依赖分割后的有效内容,建议返回符合预期格式的数据(比如"Success|NewStatus")。 - 路由匹配:如果项目使用属性路由,需确保控制器或Action上的
[Route]属性与请求URL匹配;若为传统路由,当前/控制器名/Action名的URL格式符合默认路由规则。
修复步骤
- 修改控制器方法名,与Ajax请求的URL保持一致:
[HttpPost] public string BulkParcelStatusUpdateSave(List<ParcelBulkUpdateSaveModel> sentData) { string returnString = ""; foreach (var record in sentData) { _repo.BulkParcelStatusUpdateSave(record); } return returnString; }
- 重新测试请求,此时应该能触发控制器的断点,正常处理数据。
- (可选)调整返回值格式,确保success回调中的
split("|")能获取到有效数据。
内容的提问来源于stack exchange,提问作者Jonathan Small
相关产品推荐
相关产品推荐

