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

ASP.NET Core表单提交时验证错误信息无法显示问题求助

问题原因及修复方案

1. 控制器入参未绑定校验模型

你当前控制器的LeaveReview方法接收零散参数,系统不会自动套用CreatedReview上的校验注解对这些参数做校验,ModelState.IsValid会始终返回true,自然不会触发拦截。

2. 视图字段和模型属性不匹配

模型中评论字段名为Review1,但视图里评论输入框的name属性写的是review,二者无法对应绑定,校验规则找不到对应字段也不会生效。

3. 模型缺少无参构造函数

你自定义了带参构造函数后,框架模型绑定阶段无法实例化模型对象,会导致绑定失败。


对应修改代码

模型类新增无参构造函数

public class CreatedReview
{
    // 新增无参构造函数
    public CreatedReview()
    {
    }

    public CreatedReview(string review, int stars)
    {
        this.Review1 = review;
        this.Stars = stars;
    }

    public int Id { get; set; }

    [StringLength(60, MinimumLength = 3)]
    [Required]
    public string Review1 { get; set; }

    public int? RestaurantId { get; set; }

    public int? UserId { get; set; }

    [Required]
    public int? Stars { get; set; }
}

控制器改为接收模型参数

public IActionResult LeaveReview(CreatedReview model, string name, int zipcode)
{
    if (!ModelState.IsValid)
    {
        // 校验不通过时把模型带回视图,才能显示错误提示
        return View("Index", model);
    }

    // 你的业务逻辑
    var newReview = new CreatedReview(model.Review1, model.Stars.Value);
    return View("Index");
}

视图用asp-for绑定模型字段

用asp-for会自动生成正确的name属性和前端校验属性,不需要手动写name,避免匹配错误。

@model CreatedReview
@{}

<h1>发布评论</h1>

<form method="post" asp-action="LeaveReview">
    <p>餐厅名称</p>
    <input type="text" name="name" />
    <p>邮编</p>
    <input type="number" name="zipcode" />
    <p>评论内容</p>
    <input type="text" asp-for="Review1" />
    <span asp-validation-for="Review1" class="text-danger"></span>
    <p>星级评分</p>
    <input type="number" asp-for="Stars" />
    <span asp-validation-for="Stars" class="text-danger"></span>
    <input type="submit" value="提交" />
</form>

<!-- 加上以下代码启用客户端校验,提交前就会提示错误,不用走后端请求 -->
@section Scripts {
    <partial name="_ValidationScriptsPartial" />
}

可选优化

如果不需要兼容纯js禁用的场景,加了客户端校验脚本后,用户没填内容点提交时浏览器会直接显示错误,不会发请求到后端,体验更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:48:03