Ошибка добавления в базу данных полей с формы. ASP.NET MVC
Помогите с проблемой - не прилетают данные на бд 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();
}
}
}
Источник: Stack Overflow на русском