【问题标题】:asp.net core 2.1 displaying HTML in Validation Summaryasp.net core 2.1 在验证摘要中显示 HTML
【发布时间】:2019-02-06 16:42:20
【问题描述】:

在普通的 asp.net MVC 中,如果我想在控制器或其他上游进程放置在那里的验证摘要中包含自定义 html 并在 Razor 中显示它,我只需执行以下操作:

@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationSummary().ToHtmlString()))

为了得到 html 解码。这似乎不再适用于 Asp.Net 核心。如何在 .net core 2.1 中获得相同的结果?

【问题讨论】:

    标签: razor asp.net-core asp.net-core-mvc


    【解决方案1】:

    在 ASP.NET 核心中,您可以使用 asp-validation-summary 显示 ModelState 错误的摘要(请参阅 validation documentation

    例如:

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

    如果您需要直接访问错误并创建自己的自定义 html 错误摘要/输出,可以使用@ViewData.ModelState

    例如:

    <ul>
        @foreach (var error in ViewData.ModelState.SelectMany(x => x.Value.Errors))
        {
            <li>@error.ErrorMessage</li>
        }
    </ul>
    

    如果错误信息包含原始html,可以使用@Html.Raw()

    例如:

    <ul>
        @foreach (var error in ViewData.ModelState.SelectMany(x => x.Value.Errors))
        {
            <li>@Html.Raw(error.ErrorMessage)</li>
        }
    </ul>
    

    【讨论】:

    • 谢谢,但这似乎没有回答我的问题。我需要知道如何使用控制器已经放置在那里的嵌入式 html 显示验证摘要。过去这很容易,但现在使用 .Net Core 我找不到路径。
    • @DaveS。请参阅我的更新答案。你仍然可以使用@Html.Raw()。这是否完全回答了您的问题?
    • @DaveS。此外,您不能使用 @Html.Raw(Html.ValidationSummary()) 的原因是因为 ValidationSummary() 返回 html 编码输出。您可以尝试使用自定义编码器WriteTo(您必须编写,请参阅stackoverflow.com/a/33679999/3878764),但我认为我的解决方案更容易且更易于维护。您甚至可以对我的解决方案进行部分查看。
    • 谢谢,这解决了在错误中显示解码的 HTML 内容的问题。简单明了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多