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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:39:06