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

ASP.NET Core动态表单中无法正确设置span的asp-validation-for属性

解决ASP.NET Core动态输入框的验证提示绑定问题

问题出在asp-validation-for标签助手的工作机制上:它接受的是模型属性表达式,而非直接的字符串变量。当你写asp-validation-for="@Model.NameofContentInput"时,标签助手会将其解析为模型的属性名NameofContentInput,而不是读取该变量存储的动态值,所以最终生成的data-valmsg-for属性值不符合预期。

直接解决方案:手动设置验证属性

不需要依赖asp-validation-for标签助手,直接给<span>设置data-valmsg-for和data-valmsg-replace属性——这两个属性就是asp-validation-for最终生成的核心属性:

修改后的代码片段:

@model AnswerViewModel

<fieldset class="row answerrow" style="margin: 20px;" id="@Model.answer.Id">
    <div class="form-group">
        <input type="hidden" asp-for="@Model.answer.Id" name="@Model.NameofAnswerIdInput" value="@Model.answer.Id"></input>
        <input type="hidden" asp-for="@Model.answer.QuestionId" name="@Model.NameofQuestionIdInput" value="@Model.answer.QuestionId" />

        <div id="@Model.answer.Id" class="d-flex form-group">
            <input required="true" asp-for="@Model.CorrectAnswerId" name="@Model.NameofCorrectAnswerIdRadio" 
                   type="radio" value="@Model.answer.Id" />
            <!-- 手动设置验证关联属性 -->
            <span data-valmsg-for="@Model.NameofCorrectAnswerIdRadio" data-valmsg-replace="true" class="text-danger"></span>
            
            <input id="@Model.answer.Id" required="true" asp-for="@Model.answer.Content" 
                   name="@Model.NameofContentInput" value="@Model.answer.Content" class="form-control ms-2" />
            <!-- 手动设置验证关联属性 -->
            <span data-valmsg-for="@Model.NameofContentInput" data-valmsg-replace="true" class="text-danger"></span>
        </div>
    </div>
</fieldset>

原理说明

  • data-valmsg-for:指定该提示框关联的输入框name值,必须和对应input的name完全匹配
  • data-valmsg-replace="true":表示用验证提示替换span的原有内容,这是asp-validation-for默认的行为

这样修改后,span的data-valmsg-for就会正确设置为@Model.NameofContentInput和@Model.NameofCorrectAnswerIdRadio对应的动态值,客户端验证就能正常关联到对应的输入框。

内容的提问来源于stack exchange,提问作者Mətin Abaszadə

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:01:02