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 方法将数据列表发送到控制器操作方法?