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

ASP.NET MVC如何从视图传参调用存储过程并更新模型值后保存修改

问题原因及修复方案

问题1:前后端返回类型不匹配

你无存储过程的版本返回的是单个Loan对象,而调用存储过程的版本返回的是List<LoanOrder>集合对象,前端直接读取response.Borrower自然无法获取到值,因为response此时是数组类型,需要取下标访问元素。

问题2:控制器参数未传值

存储过程版本的控制器方法需要接收Cust参数,但你的前端AJAX请求没有传递该参数,会导致Cust为null,存储过程执行后大概率返回空结果集。

问题3:参数配置不规范

创建SqlParameter时没有指定VarChar的长度,默认会按长度1处理,会截断你传入的参数值,导致存储过程查询不到匹配数据。


修复代码

1. 前端AJAX代码调整

$("#btn").click(function () {
    // 这里替换成你实际要传递的Cust参数取值逻辑,比如从输入框取值
    var custVal = "你要传的客户参数值";
    $.ajax({
        type: "GET",
        url: "/LO/AjaxGetCall",
        data: { Cust: custVal }, // 新增传递Cust参数
        dataType: "json",
        success: function (response) {
            // 判断返回的集合有数据
            if (response != null && response.length > 0) {
                // 取集合第一个元素的属性
                alert(response[0].Borrower);
                $('#Borrower').val(response[0].Borrower);
                $('#Type').val(response[0].Type);
                $('#TypeOfLoan').val(response[0].TypeOfLoan);
            } else {
                alert("未查询到对应客户数据");
            }
        },
        error: function (response) {
            alert(response.responseText);
        }
    });
});

补充:原代码中的contentType可以删掉,GET请求传表单格式参数不需要设置json类型的contentType

2. 控制器代码调整

public JsonResult AjaxGetCall(string Cust)
{
    // 先判空参数,避免无效查询
    if(string.IsNullOrEmpty(Cust))
    {
        return Json(new List<LoanOrder>(), JsonRequestBehavior.AllowGet);
    }
    List<LoanOrder> loan = new List<LoanOrder>();
    string constr = ConfigurationManager.ConnectionStrings["Conn"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        string query = "GetCustSP";
        using (SqlCommand cmd = new SqlCommand(query))
        {
            cmd.Connection = con;
            cmd.CommandType = CommandType.StoredProcedure;
            // 这里替换成你实际数据库中@Cust参数的长度
            cmd.Parameters.Add("@Cust", SqlDbType.VarChar, 50).Value = Cust;
            con.Open();
            using (SqlDataReader sdr = cmd.ExecuteReader())
            {
                while (sdr.Read())
                {
                    loan.Add(new LoanOrder
                    {
                        Type = sdr["CUSTNO"]?.ToString() ?? "",
                        Borrower = sdr["PRTNAM"]?.ToString() ?? "",
                        TypeOfLoan = sdr["ADDR"]?.ToString() ?? "",
                    });
                }
            }
            con.Close();
        }
    }
    return Json(loan, JsonRequestBehavior.AllowGet);
}

补充:增加了字段空值判断,避免数据字段为null时抛出转换异常


内容的提问来源于stack exchange,提问作者Baize

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:24:00