我是 MVC 新手,在理解模型和模型绑定方面有些困难,也很难找到相关文档。当对此模型进行更改时,我在供应商和类别上获得了 ModelState.IsValid = False。
模型:
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; }
}
我的表单是通过右键单击>添加>控制器>“带有视图,使用实体框架”自动生成的,如下所示:
<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>
但是当 POST 供应商和类别时,ValidationState = invalid
调试器中都出现了。我的直觉是,我构建的模型不正确,但我很感激任何帮助。
作为参考,我使用的数据库是 SQLite Northwind 数据库,可在此处获取:https://github.com/jpwhite3/northwind-SQLite3。
正如该文件所述,
在 .NET 6 中,必须要求非空属性,否则 ModelState 将无效。
因此,解决这个问题最简单的方法是将属性设置为可空:
<Nullable>enable</Nullable>
或者从 csproj 文件中删除 。