Hob*_*eff 3 .net validation model model-binding razor-pages
我正在使用 Razor 页面。我的模型中有两个不需要的字段:
` 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; }`
Run Code Online (Sandbox Code Playgroud)
这两个字段是 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>`
Run Code Online (Sandbox Code Playgroud)
当我提交表单时,我的 ModelState 无效,如下所示:
它显示“UserId 字段是必需的”和“StockSymbol 字段是必需的”。当 [Required] 属性显然不存在时,还有什么可能导致此要求?
根据要求,这是验证方法:
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (QuantityTraded < 1)
{
yield return new ValidationResult(
$"Quantity must be greater than 0.",
new[] { nameof(QuantityTraded) });
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
做这个。也许下面的事情会对你有所帮助。它适用于更新的 .NET core 5 > 版本。
public class OrderModel
{
public string? UserId { get; set; }
public string? StockSymbol { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
或者删除 .csproj 文件中的以下标记
<Nullable>enable</Nullable>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
872 次 |
| 最近记录: |