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

ASP.NET Core表单绑定字符串属性时Required注解验证报错异常

问题根因

你遇到的验证提示错误是两个原因共同导致的:

  • 分部视图渲染时自动添加了字段前缀:你在主视图使用<partial>标签时指定了for="CommentsViewModel",分部视图内所有asp-for生成的表单控件都会自动加上CommentsViewModel.前缀,最终提交的字段名是CommentsViewModel.NewComment,和你POST方法的参数名无法匹配,导致NewComment字段绑定失败
  • .NET 6+默认开启可空引用类型验证:你的项目如果开启了<Nullable>enable</Nullable>配置,未加?的string类型属性会被自动添加隐式非空验证,优先级高于你显式添加的[Required]注解,绑定失败时就会返回默认的The value '' is invalid错误提示

解决方案

你可以任选一种即可:

方案1:调整Action参数绑定前缀

修改你的POST方法参数,给commentsViewModel添加绑定前缀匹配前端提交的字段:

public async Task<ActionResult> AddCommentFromTranslationSetDetailView(
    [Bind(Prefix = "CommentsViewModel")] CommentsViewModel commentsViewModel,
    [FromServices] ITranslationSetDetailBuilderService builderService)

方案2:移除分部视图的字段前缀

在你的_TranslationSetDetailCommentsPartial分部视图最顶部添加以下代码,取消生成字段前缀:

@{
    ViewData.TemplateInfo.HtmlFieldPrefix = "";
}

可选:自定义错误提示

如果你需要显式指定错误提示文本,直接修改ViewModel的[Required]注解即可:

[Required(ErrorMessage = "The Comment field is required.")]
public string? NewComment { get; set; }

这里给string添加?是为了关闭隐式非空验证,确保你自定义的[Required]注解生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:57:02