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

Asp.Net Core Razor Pages中ModelState.AddModelError未显示自定义错误提示的问题

问题原因分析

这个问题的核心在于ASP.NET Core的模型绑定优先级:在你的OnPost方法执行之前,框架已经完成了请求数据到模型属性的绑定过程。由于CoursePrice是float类型,当你输入"123kk"这类无法转换为浮点数的内容时,模型绑定器会自动为Course.CoursePrice字段添加一个默认的验证错误(就是你看到的那串系统提示),并且这个错误会先于你手动添加的错误存在于ModelState中。

而你通过ModelState.AddModelError("", "...")添加的是全局错误,虽然会出现在asp-validation-summary里,但系统自动生成的字段级错误会被优先渲染,导致你的自定义提示被覆盖或者无法显示。

解决方案

我给你提供两种常用的解决思路,你可以根据需求选择:

方案1:替换系统默认的字段级错误

在OnPost方法中,先清除模型绑定自动添加的错误,再添加你的自定义提示。这样就能确保页面显示的是你想要的内容:

public IActionResult OnPost(IFormFile imgCourseUp, IFormFile demoFileName) 
{ 
    // 检查模型绑定是否因类型转换失败产生错误
    if (!ModelState.IsValid)
    {
        // 清除Course.CoursePrice字段的默认错误
        ModelState.Remove("Course.CoursePrice");
        // 给该字段添加自定义错误(也可以用空键添加全局错误)
        ModelState.AddModelError("Course.CoursePrice", "Put a Valid Number..");
        return Page();
    }

    // 后续业务逻辑...
}

方案2:使用数据注解提前定义错误提示(更优雅)

直接在你的Course模型中,给CoursePrice属性添加验证注解,这样框架会自动使用你定义的错误消息,不需要在OnPost里手动处理:

using System.ComponentModel.DataAnnotations;

public class Course
{
    // 其他属性...

    [Display(Name = "قیمت دوره")]
    // 正则表达式确保输入是有效的数字(支持整数或两位小数)
    [RegularExpression(@"^\d+(\.\d{1,2})?$", ErrorMessage = "Put a Valid Number..")]
    // 也可以用Range注解限制数值范围,同时自定义错误消息
    // [Range(0, float.MaxValue, ErrorMessage = "Put a Valid Number..")]
    public float CoursePrice { get; set; }
}

视图优化建议

为了让错误提示更直观,建议在输入字段下方添加asp-validation-for标签,这样错误会直接显示在对应字段旁边,而不仅仅是汇总区域:

<div class="form-group"> 
    <label>قیمت دوره </label> 
    <input class="form-control" type="text" asp-for="@Model.Course.CoursePrice" value="0" /> 
    <span asp-validation-for="@Model.Course.CoursePrice" class="text-danger"></span>
    <p class="help-block">لطفا فقط عدد وارد کنید</p> 
</div> 
<div class="form-group"> 
    <div asp-validation-summary="All"></div> 
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:53:12