【问题标题】:Asp NetCore 2 Required validation - ModelState Valid is true when in errorAsp Net Core 2 必需的验证 - 出错时 ModelState Valid 为真
【发布时间】:2018-05-22 01:23:32
【问题描述】:

我正在尝试在 AspNetCore 2 中进行一些必需的字段验证,但我期望发生的事情并没有发生。

型号

[Required(ErrorMessage = "The game name cannot be blank")]
[StringLength(100,ErrorMessage = "The game name must be between 2 and 100 characters", MinimumLength = 2)]
[Display(Name = "Name")]
public string GameName { get; set; }

控制器

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult GameDetail(GameDetail model, IFormCollection form)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }

    // code removed for clarity
}

查看

<div asp-validation-summary="ModelOnly" class="text-danger"></div>

<form class="form" method="post">
  <div class="form-group">
    <label class="form-label" asp-for="GameName"></label>
    <span asp-validation-for="GameName" class="text-danger"></span>
    <input class="form-control" asp-for="GameName" class="form-control" />
  </div>
  <div class="form-group">
    <input class="button" type="submit" value="Continue">
  </div>
</form>

在 MVC5 中,如果发布此表单时未输入任何值,则 ModelState 将无效并且将向视图返回错误。

但是,在这种情况下,ModelState.IsValid 为 true,但错误计数为 1,并且错误列表确实显示该字段为错误。

我尝试了一些方法,包括在模型的帖子参数上添加 [Bind("GameName")] 以及模型上的 [BindRequired] 以及这篇帖子:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation

然而,表单提交并重定向到下一页(为清楚起见已删除代码)而没有显示任何错误。

我希望看到返回的视图带有显示所需错误消息的字段错误消息和显示相同错误的错误摘要。

【问题讨论】:

    标签: c# validation razor asp.net-core model


    【解决方案1】:

    我认为您必须在所需属性上添加 AllowEmptyString=false。

    [Required (AllowEmptyStrings = false)]
    

    【讨论】:

    • 这没有效果。
    【解决方案2】:

    该死的!是的,这完全是我的失误,我不知道为什么我没有先看到这个!我首先用一个简单的表单对页面进行了编码,只是为了对布局进行排序,所以只使用 IFormCollection 来节省我编写模型的时间

    public IActionResult GameDetail(GameDetail model, IFormCollection form)
    

    删除了 IFormCollection 表单,它的工作方式完全符合我的预期。

    【讨论】:

      猜你喜欢
      • 2013-06-28
      • 2020-08-30
      • 2018-11-11
      • 2018-12-15
      • 2020-03-09
      • 1970-01-01
      • 2019-09-02
      • 2017-08-03
      • 1970-01-01
      相关资源
      最近更新 更多