MVC中通过第二个模型传递JSON至控制器——解决LOs模型无法用JSON.stringify(LOs)传递的问题
解决AJAX传递LOs模型到MVC控制器的问题
你在AJAX传递模型时踩了几个典型的MVC交互坑,我来帮你一步步梳理修复方案:
1. 修正请求类型与参数传递逻辑
你当前用GET请求配合JSON.stringify()的方式是行不通的——GET请求的参数会拼接在URL上,无法直接解析JSON字符串。对于复杂模型的传递,优先使用POST请求,同时需要明确指定请求的Content-Type。
2. 修复视图中LOs对象的获取
视图里直接调用LOs是未定义的变量,你需要先把后端的MainLoanOrderModel中的LOs属性转换为前端可识别的JS对象。
3. 修正控制器参数类型
控制器方法的参数是LOs newLoanOrder,但你的实际模型类是LOsBorrower,参数类型不匹配会导致MVC无法正确绑定数据。
修改后的完整代码示例
视图AJAX代码
$(function () { $("#add_borrower").click(function (e) { // 把后端模型的LOs属性转为JS对象(避免XSS风险用Html.Raw) var losData = @Html.Raw(Json.Serialize(Model.LOs)); $.ajax({ type: "POST", // 改为POST请求,适配复杂模型传递 url: '/Loan/GetsBorrower', data: JSON.stringify(losData), contentType: "application/json; charset=utf-8", // 必须指定JSON格式的请求头 dataType: "html", success: function (data) { $("#S_Borrower").html(data); }, error: function(xhr, status, error) { // 新增错误处理,方便调试问题 console.error("请求失败:", error); } }); }); });
控制器代码
// 添加HttpPost特性,明确接收POST请求 [HttpPost] // 参数类型改为对应模型LOsBorrower public PartialViewResult GetsBorrower(LOsBorrower newLoanOrder) { // 建议新增模型验证,确保接收的数据合法 if(ModelState.IsValid) { db.LOsBorrowers.Add(newLoanOrder); db.SaveChanges(); } return PartialView("_S_Borrower"); }
额外补充说明
- 如果一定要使用GET请求(不推荐复杂模型),不要用
JSON.stringify(),直接传递JS对象即可,jQuery会自动把它序列化为URL参数格式:data: losData, type: "GET" - 确保
LOsBorrower类的属性名称和前端传递的JSON字段保持一致(MVC默认大小写不敏感,但保持一致能避免不必要的绑定问题)。
内容的提问来源于stack exchange,提问作者Baize
相关产品推荐
相关产品推荐

