You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 3.1 MVC无JS实现错误时统一修改页面标题

解决方案

你可以通过两种集中化的方式实现需求,无需在每个页面重复编写逻辑:


方案一:在共享错误摘要部分视图中处理(符合你的预期场景)

这种方式将标题修改逻辑和错误摘要绑定在一起,仅在渲染错误摘要时调整标题:

  1. 移除所有视图页面中的重复逻辑:删除每个视图里手动修改标题的代码块,只保留ViewData["Title"]的初始化:
@page
@model SampleModel

@{
    ViewData["Title"] = "What do you do?";
}

<partial name="_ErrorSummary" model="ModelState" />
  1. 修改_ErrorSummary.cshtml:添加前缀时检查是否已存在,避免重复添加:
@model Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary

@if (!Model.IsValid)
{    
    var currentTitle = ViewData["Title"]?.ToString() ?? string.Empty;
    // 防止重复添加前缀
    if (!currentTitle.StartsWith("Error: "))
    {
        ViewData["Title"] = $"Error: {currentTitle}";
    }
     
    <div class="govuk-error-summary" aria-labelledby="error-summary-title" role="alert" data-module="error-summary">
        <h2 class="govuk-error-summary__title" id="error-summary-title">
            There is a problem
        </h2>
        <div class="govuk-error-summary__body">
            <ul class="govuk-list govuk-error-summary__list">
                @foreach (var modelError in Model)
                {
                    var errorField = modelError.Key;
                    foreach (var error in modelError.Value.Errors)
                    {
                        <li>
                            <a href="#@errorField">@error.ErrorMessage</a>
                        </li>
                    }
                }
            </ul>
        </div>
    </div>
}

注意:确保每个视图先设置ViewData["Title"],再渲染_ErrorSummary,这样部分视图才能正确获取并修改标题。


方案二:直接在布局页_Layout.cshtml中处理(更简洁的集中方式)

将逻辑完全集中在布局页,无需修改任何视图或部分视图:

修改_Layout.cshtml中的标题渲染逻辑,直接判断ModelState状态并添加前缀:

@if (ViewData["Title"] != null)
{
    var pageTitle = ViewData["Title"].ToString();
    // 检查ModelState是否存在错误,动态添加前缀
    if (!ViewData.ModelState.IsValid)
    {
        pageTitle = $"Error: {pageTitle}";
    }
    <title> 
        @pageTitle - Sample Application
    </title>
}

这种方式的优势是:所有页面只要设置了ViewData["Title"],就会自动在验证失败时添加错误前缀,无需额外编写任何视图逻辑。


内容的提问来源于stack exchange,提问作者matrixnew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:30:42