Jquery.ajax 将 null 发送到控制器,但使用硬编码的变量

Posted

技术标签:

【中文标题】Jquery.ajax 将 null 发送到控制器,但使用硬编码的变量【英文标题】:Jquery.ajax sends null to controller, but works with hard-coded variables 【发布时间】:2021-03-04 01:51:43 【问题描述】:

我正在用 vs 代码制作一个简单的应用程序,我想将值保存到数据库中,这就是我目前所拥有的。

 var naziv = $("#TextNaziv").val();
        var cena = $("#TextCena").val();
        var opis = $("#TextOpis").val();

        //console.log("Cena:" + cena);
       // console.log("Opis:" + opis);
       // console.log("Naziv:" + naziv);

        var proizvod = 
            Naziv: "nazivTest123",
            Cena: 33,
            Opis: "opisTest123"
        

       // console.log(proizvod);
        var zahtev = $.ajax(
            type: "POST",
            url: "/Home/UbaciProizvod",
            data: JSON.stringify(proizvod),
            contentType: "application/json",
            dataType: "text",

        );

这很好用,没有任何问题,但是当我将 var proizvod 更改为:

var proizvod = 
     Naziv: naziv,
     Cena: cena,
     Opis: opis
        

应用程序不会将值保存到数据库中,即使我在控制台中检查并且值很好,控制器也会收到空值。我尝试了我在互联网上看到的所有内容,但似乎没有任何帮助,也许是一些小问题但我无法解决,我的控制器功能如下所示:

public int UbaciProizvod([FromBody] Proizvod p )

    string upit = @"INSERT INTO Proizvod VALUES(@Naziv,@Cena,@Opis);
                            SELECT CAST(SCOPE_IDENTITY() AS int)";

        using(SqlConnection konekcija = new SqlConnection(Konekcija.CnnMagacin))
        
            try
            
                int id = konekcija.QuerySingleOrDefault<int>(upit,p);
                return id;

            
            catch (System.Exception)
            
                
               return -1;
            
        

这是我的第一篇文章,因此欢迎所有建议和批评,并对变量名表示抱歉。

【问题讨论】:

我建议您调试从请求返回的响应。话虽如此,我能看到的唯一区别是 val() 返回一个字符串,但在工作硬编码版本中,您给 Cena 一个整数值。因此,您可能需要转换为整数:Cena: parseInt(cena, 10) 像魅力一样工作,谢谢我的兄弟!,我按照你的建议使用了 'Cena: parseInt(cena, 10)',它解决了所有问题。再次感谢您 很高兴它有帮助。我添加它作为你的答案 【参考方案1】:

这两个版本的区别在于您在工作版本中提供Cena 作为整数值,但在非工作版本中提供字符串。

在发出 AJAX 请求之前修复此调用 parseInt() 的值:

var proizvod = 
  Naziv: naziv,
  Cena: parseInt(cena, 10),
  Opis: opis

【讨论】:

感谢您的回答,但既然您提到了 SQL 注入,我必须再问您一些问题,我知道它是什么,但是您确定上面的代码对 SQL 注入是开放的,因为我找到了在dapper-tutorial.net 上插入值的方法完全相同,而且我也看过一些使用 dapper 这样的教程,sql 查询中有参数,据我所知 Dapper 是一个 ORM 映射实体属性与匹配的 SQL 列. 你是对的 - 你对 Dapper 的使用是正确的。事实上,我完全想念你在使用 Dapper 并误读了你的代码。我的错。

以上是关于Jquery.ajax 将 null 发送到控制器,但使用硬编码的变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET MVC 中使用 jQuery ajax 方法将数据列表发送到控制器操作方法?

数据从 AJAX 调用传递到控制器但获取空值

使用 jquery ajax 发布时,Httppostedfilebase 始终返回 null

jQuery Ajax 不将数组作为数据对象发送

当 jQuery Ajax 调用完成时控制请求

RoR:发送附加数据以使用 Jquery AJAX 提交