如何发布到依赖于连接/包含数据的模型?

问题描述 投票:0回答:1

我是 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>

但是当发布供应商和类别时,调试器中都会有一个

ValidationState = invalid
。我的预感是我错误地构建了模型,但我希望在这里得到任何帮助。

作为参考,我使用的数据库是 SQLite Northwind 数据库:https://github.com/jpwhite3/northwind-SQLite3

asp.net-core-mvc
1个回答
0
投票

正如这份文件所说,

.NET 6 之前,新项目不包含 Nullable 元素。 从 .NET 6 开始,新项目包括 在项目文件中启用元素。

在 .NET 6 中,必须要求不可为 null 的属性,否则 ModelState 将无效。

因此,解决该问题最简单的方法是将属性设置为可为空:

[ForeignKey("Supplier")]
       public int SupplierID { get; set; }
       public Suppliers? Supplier { get; set; }  // Nullable

       [ForeignKey("Category")]
       public int CategoryID { get; set; }
       public Categories? Category { get; set; }  // Nullable

或者从 csproj 文件中删除

<Nullable>enable</Nullable>

© www.soinside.com 2019 - 2024. All rights reserved.