#c# #jquery #ajax #asp.net-mvc #asp.net-ajax
#c# #jquery #ajax #asp.net-mvc #asp.net-ajax
Вопрос:
Я делал простое приложение в vs code, и я хочу сохранить значения в базе данных, это то, что у меня есть до сих пор.
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 prozvod на:
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;
}
}
}
Это мой первый пост, поэтому приветствуются все предложения и критика, и извините за имена переменных.
Комментарии:
1. Я бы посоветовал вам отладить ответ, возвращающийся из запроса. При этом единственное различие, которое я вижу, заключается в том, что
val()
возвращает строку, но в рабочей жестко запрограммированной версии вы даетеCena
целочисленное значение. Таким образом, вам может потребоваться преобразовать в целое число:Cena: parseInt(cena, 10)
2. Работает как шарм, спасибо, мой брат!, Я использовал ‘Cena: parseInt (cena, 10)’, как вы и предлагали, и это решило все. Еще раз спасибо
3. Рад, что это помогло. Я добавил это как ответ для вас
Ответ №1:
Разница между двумя версиями заключается в том, что Cena
в рабочей версии вы указываете целочисленное значение, а в нерабочей — строку.
Чтобы исправить этот вызов parseInt()
для значения перед выполнением AJAX-запроса:
var proizvod = {
Naziv: naziv,
Cena: parseInt(cena, 10),
Opis: opis
}
Комментарии:
1. Спасибо за ответ, но я должен спросить вас больше теперь, когда вы упомянули SQL-инъекцию, я знаю, что это такое, но вы уверены, что приведенный выше код открыт для SQL-инъекции, потому что я нашел точно такой же метод для вставки значений в dapper-tutorial.net , и я тоже видел несколько учебных пособий с использованием таким образом, в sql-запросе есть параметры, и, насколько я знаю, Dapper, являющийся ORM, сопоставляет свойства объекта с соответствующими столбцами SQL.
2. Вы правы — ваше использование Dapper правильно. На самом деле я пропустил, что вы вообще использовали Dapper, и неправильно прочитал ваш код. Моя ошибка.