为什么我的验证摘要没有呈现?

时间:2017-02-13 18:48:43

标签: asp.net validation asp.net-core asp.net-core-mvc modelstate

我有这个viewmodel:

public class PersonBindingModel
{
    public int Id { get; set; }
    [Required]
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public int Age { get; set; }
}

以及Create视图的相关部分由标准.NET Core和EF Core包支持:

<form asp-action="Create">
    <div class="form-horizontal">
        <h4>PersonBindingModel</h4>
        <hr />
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="LastName" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="LastName" class="form-control" />
                <span asp-validation-for="LastName" class="text-danger"></span>
            </div>
        </div>
    </div>
    ...
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
</form>

然而,当我省略所需的LastName时,我只在该输入下获得验证消息,并且根本不呈现验证摘要。在我的项目中的所有其他表单中,将呈现摘要以及LastName输入下的消息。这是渲染形式:

<form action="/persons/Create" method="post">
    <div class="form-horizontal">
        <h4>PersonBindingModel</h4>
        <hr>

        <div class="form-group">
            <label class="col-md-2 control-label" for="LastName">LastName</label>
            <div class="col-md-10">
                <input class="form-control input-validation-error" type="text" data-val="true" data-val-required="The LastName field is required." id="LastName" name="LastName" value="">
                <span class="text-danger field-validation-error" data-valmsg-for="LastName" data-valmsg-replace="true">The LastName field is required.</span>
            </div>
        </div>
        ...
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default">
            </div>
        </div>
    </div>
    ...
</form>

我省略了客户端验证,即_ValidationScriptsPartial,因为我正在测试模型绑定验证控制器端,以及我添加的无关自定义验证。无论是否使用自定义验证,表单都会呈现相同的效果。

在呈现的HTML中,您可以清楚地看到丢失的LastName已生成ModelState错误,而且我一直认为,只要{{1包含模型错误,即输入名称为键的错误,验证摘要应该呈现。为什么不呢?

1 个答案:

答案 0 :(得分:0)

在这个特殊情况下,我认为这是你向&#34; ModelState&#34;

添加错误的方式
ModelState.AddModelError(string.Empty, x.Description)

请注意,空字符串,这就是&#34; ModelOnly&#34;知道这不是属性错误。

如果您有除空字符串以外的任何内容,则会将其视为属性错误,并且只会在模式中显示&#34; 所有&#34;