【问题标题】:Adding a specific error message to a view in mvc将特定错误消息添加到 mvc 中的视图
【发布时间】:2026-01-10 08:30:01
【问题描述】:

是否可以向视图中的字段添加特定的错误消息? 目前我对模型进行了验证以检查字段是否为空(ValidationMessageFor),并且我正在使用验证摘要来处理特定错误。 我想知道为摘要创建的特定错误消息是否可以替换 ValidationMessageFor?

型号:

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

查看:

@Html.ValidationSummary("", new { @class = "text-danger" })
@Html.EditorFor(m => m.SchoolCode, new { htmlAttributes = new { @class = "form-control", @placeholder = "School Code" } })

@Html.ValidationMessageFor(model => model.SchoolCode, "", new { @class = "text-danger" })

控制器:

var schoolExists = RepositoryHelper.GetSchoolByCode(model.SchoolCode);
if (schoolExists == null)
{
    ModelState.AddModelError(string.Empty, @"No school exists with this code");
    return View(model);
}
if (ModelState.IsValid)
{
    //do other stuff
}

因此,如果模型状态无效,它会返回模型错误,但如果输入了不正确的代码,它会在验证摘要中添加“No school exists with this code”。可以用学校代码汇总错误代替学校代码模型错误吗?

【问题讨论】:

  • 以后请格式化您的代码以便更好地阅读。

标签: asp.net-mvc validation razor


【解决方案1】:

需要在AddModelError()方法中指定属性名

ModelState.AddModelError("SchoolCode", "No school exists with this code");

这样它就会显示在@Html.ValidationMessageFor(m => m.SchoolCode, ... })标识的占位符中

【讨论】:

    【解决方案2】:

    是的,可以覆盖错误消息。您需要做的就是在ModelState.AddModelError 方法调用中引用该项目并指定错误消息文本。

    您可以覆盖以下错误消息:

    • 未指定错误消息时的默认错误消息
    • 您指定的错误消息

    为您的文本框生成的HTML 输出将如下所示:

    <input
        class="input-validation-error form-control text-box single-line"
        data-val="true"
        data-val-required="Source code is required"
        id="SchoolCode"
        name="SchoolCode"
        placeholder="School Code"
        type="text"
        value="" />
    

    注意idname 属性的值很重要。它们已设置为SchoolCode。当您需要覆盖错误消息时,您需要使用值 SchoolCode 以便您知道您正在引用/使用哪个 HTML 元素。

    因此,根据其他一些标准添加自定义错误消息,您需要将代码更改为如下所示:

    if (schoolExists == null)
    {
         ModelState.AddModelError("SchoolCode", "No school exists with this code");
    
         return View(model);
    }
    

    我希望这会有所帮助。

    【讨论】: