Witam,
mam problem z walidacją podczas tworzenia rekordu.
Konfiguracja modelu (pole nazwa produktu):
entityTypeBuilder
.Property(p => p.Name)
.IsRequired()
.HasColumnType("varchar(255)");
Klasa kontrolera:
public async Task<IActionResult> Create([Bind("Name,Price,Id,CreatedDate,UpdatedDate")] Product product)
{
if (!ModelState.IsValid)
{
return RedirectToAction("Index");
}
var successful = await _productsService.CreateProduct(product);
if (!successful)
{
return BadRequest("Could not add Product.");
}
return RedirectToAction("Index");
}
Problem polega na tym że formularz przepuszcza mi wartości wymagane.
Po nie wypełnieniu wartości tego pola jest:
SqlException: Cannot insert the value NULL into column 'Name', table 'CRM.dbo.Products'; column does not allow nulls. INSERT fails
Input:
(zamieściłem tylko część formularza, który po submicie wykonuje metodę Create):
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Price" class="control-label"></label>
<input asp-for="Price" class="form-control" />
<span asp-validation-for="Price" class="text-danger"></span>
</div>
Ustawiłem pole Name jako wymagane więc jeśli w powyższy input nie wpiszę wartości to czy nie powinien mi zwrócić napisu w stylu: The Name field is required?
Dodam że pole Price jest prawidłowo przechwytywane jako puste.
Wydaje mi się że jest to spowodowane tym że string Name jest typem referencyjnym. Jednak nie chcę ustawiać go w modelu jako nullable.
Dodam że ModelState.IsValid zwraca true więc wykonywana zostaje CreateProduct która rzuca wyjątkiem (dokładnie to przy zapisie -> SaveChangesAsync)
Czy jak ustawię tego stringa na nullable to nadal będę mógł ustawić go jako wymagany?
Co w tej sytuacji polecacie?