Ошибка добавления в базу данных полей с формы. ASP.NET MVC

Рейтинг: 0Ответов: 0Опубликовано: 05.07.2023

Помогите с проблемой - не прилетают данные на бд MySQL. Использую MySQL Connector. В базе поля равны id, brand, imageName, price и Type Итак, есть форма:

@model WebShop.Models.Bicycle
@using (Html.BeginForm("AddBicycle", "Admin", FormMethod.Post))
{
@Html.AntiForgeryToken()

<div class="form-group">
    @Html.LabelFor(model => model.Brand)
    @Html.TextBoxFor(model => model.Brand, new { @class = "form-control" })
    @Html.ValidationMessageFor(model => model.Brand)
</div>

<div class="form-group">
    @Html.LabelFor(model => model.Price)
    @Html.TextBoxFor(model => model.Price, new { @class = "form-control" })
    @Html.ValidationMessageFor(model => model.Price)
</div>

<div class="form-group">
    @Html.LabelFor(model => model.imageName)
    @Html.TextBoxFor(model => model.imageName, new { @class = "form-control" })
    @Html.ValidationMessageFor(model => model.imageName)
</div>

<div class="form-group">
    @Html.LabelFor(model => model.Type)
    @Html.TextBoxFor(model => model.Type, new { @class = "form-control" })
    @Html.ValidationMessageFor(model => model.Type)
</div>

<div class="form-group">
    <input type="submit" value="AddBicycle" class="btn btn-primary" />
</div>
}

И контроллер к ней:

public class AdminController : Controller
{
private readonly string _connectionString = "connection";
private readonly MySqlDatabase _database;

public AdminController(MySqlDatabase database)
{
    _database = new MySqlDatabase(_connectionString);
}

public ActionResult Index()
{
    return View();
}

public ActionResult AddBicycle()
{
    return View();
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddBicycle(Bicycle bicycle)
{
    var getIdQuery = "SELECT LAST_INSERT_ID() AS id";
    var result = _database.ExecuteQuery(getIdQuery);
    var generatedId = Convert.ToInt32(result[0]["id"]);

    bicycle.Id = generatedId;

    if (ModelState.IsValid)
    {
        var query = "INSERT INTO bicycles (id, brand, price, imageName, Type) " +
                    "VALUES (@Id, @Brand, @Price, @imageName, @Type)";
        var parameters = new Dictionary<string, object>
        {
            {"@Id", (int)generatedId},
            { "@Brand", bicycle.Brand },
            { "@Price", Convert.ToDecimal(bicycle.Price) },
            { "@imageName", bicycle.imageName },
            { "@Type", bicycle.Type }
        };

        try
        {
            _database.ExecuteNonQuery(query, parameters);
            return RedirectToAction("Index");
        }
        catch (Exception ex)
        {
            ModelState.AddModelError("", "Error occurred while saving data: " + ex.Message);
            return View(bicycle);
        }

    }
    return RedirectToAction("Index");
}

}

Модель Bicycle имеет следующий вид:

[Table("bicycles")]
public class Bicycle 
{
    public int Id { get; set; }
    public string Brand { get; set; }
    public decimal Price { get; set; }
    public string imageName { get; set; }
    public string Type { get; set; }
}

А также сам метод для общения с БД:

public void ExecuteNonQuery(string query, Dictionary<string, object> parameters = null)
{
    using (var connection = new MySqlConnection(_connectionString))
    {
        connection.Open();
        using (var command = new MySqlCommand(query, connection))
        {
            if (parameters != null)
            {
                foreach (var parameter in parameters)
                {
                    command.Parameters.AddWithValue(parameter.Key, parameter.Value);
                }
            }

            command.ExecuteNonQuery();
        }
    }
}

Ответы

Ответов пока нет.