【问题标题】:Why does my validation summary not render?为什么我的验证摘要不呈现?
【发布时间】:2017-07-01 20:50:32
【问题描述】:

我有这个视图模型:

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

以及由标准 .NET Core 和 EF Core 包为其搭建的 Create 视图的相关部分:

<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的错误,我一直的印象是,像这样的表单,只要ModelState包含模型错误,即一个以输入名称作为键的,验证摘要应该呈现。为什么不呢?

【问题讨论】:

  • 你试过asp-validation-summary="All"吗?
  • @StephenMuecke 所有All 选项所做的只是包含您使用空属性名称键添加的消息。我实际上想知道为什么它没有使用有效键显示我的错误,所以我实际上只对ModelOnly 感兴趣。不过我还是试试看,谢谢。
  • asp-validation-summary="All" 等同于@Html.ValidationSummary(false)asp-validation-summary="ModelOnly" 等同于@Html.ValidationSummary(true)
  • 是的,@StephenMuecke,但truefalse 表示“仅显示模型错误”或“不;t 显示模型错误”。多年来我一直在使用以前的版本,此外,我所有的其他摘要都会呈现我使用的任何选项。

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


【解决方案1】:

在这种特殊情况下,我认为这是您将错误添加到“ModelState”的方式

ModelState.AddModelError(string.Empty, x.Description)

注意 KeyEmpty string ,这就是“ModelOnly”知道它不是属性错误的方式。

如果您有空字符串以外的任何内容,它将被视为属性错误,并且只会在“ALL”模式下显示

【讨论】:

  • 我有两种错误,键和"" 键(不完全是String.Empty,但它以前正常工作)。在这种情况下,它不会为模型和非模型错误的任何组合呈现任何内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多