Sou novo no MVC e estou com um pouco de dificuldade para entender modelos e model binding, e estou com dificuldade para encontrar isso documentado. Ao POSTAR uma alteração neste modelo, recebo um ModelState.IsValid = False no Supplier e Category.
Modelo:
public class Products
{
[Key]
public int ProductID { get; set; }
[Required]
public string ProductName { get; set; } = string.Empty;
[ForeignKey("Supplier")]
public int SupplierID { get; set; }
public Suppliers Supplier { get; set; }
[ForeignKey("Category")]
public int CategoryID { get; set; }
public Categories Category { get; set; }
public string? QuantityPerUnit { get; set; }
public decimal UnitPrice { get; set; }
public int UnitsInStock { get; set; }
public int UnitsOnOrder { get; set; }
public int ReorderLevel { get; set; }
public string? Discontinued { get; set; }
}
Meu formulário é gerado automaticamente a partir do clique com o botão direito > Adicionar > Controlador > "com visualizações, usando Entity Framework", que se parece com isto:
<form asp-action="Edit">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="ProductID" />
<div class="form-group">
<label asp-for="ProductName" class="control-label"></label>
<input asp-for="ProductName" class="form-control" />
<span asp-validation-for="ProductName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="SupplierID" class="control-label"></label>
<select asp-for="SupplierID" class="form-control" asp-items="ViewBag.SupplierID"></select>
<span asp-validation-for="SupplierID" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="CategoryID" class="control-label"></label>
<select asp-for="CategoryID" class="form-control" asp-items="ViewBag.CategoryID"></select>
<span asp-validation-for="CategoryID" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="QuantityPerUnit" class="control-label"></label>
<input asp-for="QuantityPerUnit" class="form-control" />
<span asp-validation-for="QuantityPerUnit" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="UnitPrice" class="control-label"></label>
<input asp-for="UnitPrice" class="form-control" />
<span asp-validation-for="UnitPrice" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="UnitsInStock" class="control-label"></label>
<input asp-for="UnitsInStock" class="form-control" />
<span asp-validation-for="UnitsInStock" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="UnitsOnOrder" class="control-label"></label>
<input asp-for="UnitsOnOrder" class="form-control" />
<span asp-validation-for="UnitsOnOrder" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="ReorderLevel" class="control-label"></label>
<input asp-for="ReorderLevel" class="form-control" />
<span asp-validation-for="ReorderLevel" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Discontinued" class="control-label"></label>
<input asp-for="Discontinued" class="form-control" />
<span asp-validation-for="Discontinued" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn btn-primary" />
</div>
</form>
Mas ao POSTAR o Fornecedor e a Categoria ambos têm um ValidationState = invalid
no depurador. Meu palpite é que construí o modelo incorretamente, mas eu apreciaria qualquer ajuda aqui.
Para referência, o banco de dados que estou usando é o SQLite Northwind, disponível aqui: https://github.com/jpwhite3/northwind-SQLite3 .