【问题标题】:ASP.Net Core Razor model validation for a <select> element<select> 元素的 ASP.Net Core Razor 模型验证
【发布时间】:2022-04-23 01:58:14
【问题描述】:

我有一个 .Net Core Web 应用程序,我正在尝试让模型验证按我的意愿工作。

剃须刀代码是

  <div class="form-group">
      <label asp-for="Duration"></label>
      <select asp-for="Duration" class="form-control">
          <option value="">Pick number of days</option>
          <option value="7">7 days</option>
          <option value="14">14 days</option>
          <option value="21">21 days</option>
          <option value="28">28 days</option>
      </select>
      <div><span asp-validation-for="Duration" class="text-danger"></span></div>
  </div>

模型是

  [Required(ErrorMessage = "The duration is required")]
  [Display(Name = "Length of audit:")]
  public int Duration { get; set; }

如果我不选择任何值,下拉菜单将保持在“选择天数”。显示的验证消息是“值 '' 无效。

除了创建自己的自定义验证器之外,我如何获取代码以生成“需要持续时间”的验证消息

【问题讨论】:

  • 你重建你的项目了吗?
  • 是的,我有。问题似乎在于不同验证器的工作方式。
  • 一种解决方案是使用 进行无选择和 [Range(7,28,ErrorMessage = "The duration is required") 代替注释的 [必需]。我不想选择一个值,但它确实有效。
  • 是的,为了避免由于字符串值无法转换为int而导致该消息,您需要首先提供一个有效的int0是这里的最佳选择。然后,您的自定义验证可以进行验证并生成您想要的任何消息。

标签: asp.net-core razor-pages


【解决方案1】:

Duration 属性的数据类型更改为可为空的int

public int? Duration { get; set; }

【讨论】:

    【解决方案2】:

    您可以将 required 添加到选择列表中

      <select required asp-for="Duration" class="form-control">
          <option value="">Pick number of days</option>
          <option value="7">7 days</option>
          <option value="14">14 days</option>
          <option value="21">21 days</option>
          <option value="28">28 days</option>
      </select>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 2017-03-09
      相关资源
      最近更新 更多