asp .net core - 自定义验证错误未显示在视图中

Mar*_*rko 4 validation html-helper asp.net-core

这是我的数据模型,它包括一个自定义验证:

public class MyData : IValidatableObject
{
    public int ID { get; set; }
    public int number { get; set; }

    [Required]
    public string text { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (text.Length < number)
        {
            yield return new ValidationResult(
                "Text too short, must be at least: " + number.ToString(),
                new[] { "number" });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我观点的一部分:

<div class="form-group">
    <label asp-for="number" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <input asp-for="number" class="form-control" />
        <span asp-validation-for="number" class="text-danger" />
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

自定义验证错误文本永远不会显示在 asp-validation-for 应该放置的地方(当字段数据不存在时,标准消息 The number field is required.” 正确显示)。

但是,如果我在视图中添加此代码段:

<div>
    @Html.ValidationMessage("number")
</div>
Run Code Online (Sandbox Code Playgroud)

...它将显示自定义错误消息。

asp-validation-for helper 有什么问题?

Mud*_*auf 5

我在你使用的代码中发现了

<span asp-validation-for="number" class="text-danger" />
Run Code Online (Sandbox Code Playgroud)

您需要添加结束标记。使用它就像

<span asp-validation-for="number" class="text-danger" ></span>
Run Code Online (Sandbox Code Playgroud)

它会在字段下方显示错误消息。