.net ModelState显示validationstate对于不需要的字段无效

kxeu7u2r  于 2022-12-27  发布在  .NET
关注(0)|答案(1)|浏览(140)

我正在使用剃刀页。我有两个字段,在一个模型中是不需要的:

`    public class OrderModel : EntityModel, IValidatableObject
    {        
        public string UserId { get; set; } 
        public int PortfolioId { get; set; }
        public int StockId { get; set; }
        public int StockHoldingId { get; set; }
        public string StockSymbol { get; set; } 

        [Required]
        [DisplayName("Shares Traded")]
        public int QuantityTraded { get; set; }`

这两个字段是UserId和StockSymbol。我有一个表单的以下部分,UserId和StockSymbol不存在,因此为null或空,这是我有意做的:

`        <div>
            Quantity: <input type="number" min="0" asp-for="@Model.Order.QuantityTraded" />
            <input type="hidden" asp-for="@Model.Stock.Id" />
            <input type="hidden" asp-for="@Model.Stock.Symbol" />
            <input type="hidden" asp-for="@Model.Stock.Price" />
            <input type="hidden" asp-for="@Model.Stock.StockName" />
            <input type="hidden" asp-for="@Model.Stock.Description" />
            <input class="btn-primary" type="submit" value="Buy" asp-page-handler="Buy" />
            <input class="btn-primary" type="submit" value="Sell" asp-page-handler="Sell" />
        </div>`

当我提交表单时,我的ModelState无效,如下所示:

它显示“UserId字段是必需的”和“StockSymbol字段是必需的”。当[Required]属性显然不存在时,还有什么可能导致这种需求?
根据要求,下面是Validate方法:

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
    if (QuantityTraded < 1)
    {
        yield return new ValidationResult(
            $"Quantity must be greater than 0.",
            new[] { nameof(QuantityTraded) });
    }
}
ajsxfq5m

ajsxfq5m1#

这样做。也许下面的事情会对你有帮助。它适用于更新的。NET核心5〉版本。

public class OrderModel
{        
    public string? UserId { get; set; }
    public string? StockSymbol { get; set; }
}

或删除.csproj文件中的以下标记

<Nullable>enable</Nullable>

相关问题