ASP.NET Core 无法将 span 名称分配给局部变量

ASP.NET Core can’t assign span name to local variable

提问人:Mətin Abaszadə 提问时间:1/21/2023 最后编辑:SparkyMətin Abaszadə 更新时间:1/23/2023 访问量:55

问:

我将动态输入添加到我的表单中,当我添加时,我会为我的输入动态创建一个名称并设置它。但是,我无法为 span 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 asp-validation-for="@Model.NameofCorrectAnswerIdRadio" 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 asp-validation-for="@Model.NameofContentInput" class="text-danger"></span>
        </div>
    </div>
</fieldset>

当我检查检查时,span 名称设置为“data-valmsg-for=”NameofContentInput”。如何将范围名称正确设置为“@Model.NameofContentInput”?

asp.net asp.net-mvc asp.net-core unobtrusive-validation asp.net-validators

评论

0赞 pcalkins 1/21/2023
浏览器将输出 HTML 的源代码...ASP.NET 将读取/解释 @...指令。。。所以在处理@Model.NameOfContentInput....该输出将是视图模型中 NameOfContentInput 的值(.cs 文件定义模型..应为“AnswerViewModel”?
0赞 Mətin Abaszadə 1/22/2023
但是“@”指令没有解释,结果是这样发生的:<span class=“text-danger field-validation-valid” data-valmsg-for=“NameofContentInput” data-valmsg-replace=“true”></span>。它不是将 @Model.NameofContentInput 的值分配给 data-valmsg-for,而是以 data-valmsg-for=“NameofContentInput” 为结果

答:

1赞 Brando Zhang 1/23/2023 #1

asp-validation-for 标记帮助程序用于模型的属性,而不是模式的属性名称。这就是为什么 will render as not the .asp-validation-for="@Model.NameofContentInput"data-valmsg-for="NameofContentInput"data-valmsg-for="test"

更多详细信息可以参考 ValidationMessageTagHelper 的源 coeds。

它将使用此方法来生成 html,您会发现它将生成 html 在属性名称上,而不是值。