Asp NetCore 2必需的验证 - ModelState Valid出错时为true

时间:2017-12-07 20:46:53

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

我试图在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(&#34; GameName&#34;)]和模型上的[BindRequired]以及此帖子:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation

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

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

2 个答案:

答案 0 :(得分:0)

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

[Required (AllowEmptyStrings = false)]

答案 1 :(得分:0)

该死的!是的,这对我来说是完全彻底搞砸了,我不知道为什么我没有先看到这个!我首先使用一个简单的表单对页面进行编码,以便对布局进行排序,因此只使用IFormCollection来保存我编写模型

public IActionResult GameDetail(GameDetail model, IFormCollection form)

删除 IFormCollection表单,它的工作方式与我预期的完全相同。