ModelState的键与生成的data-valmsg-for之间不同步?

问题描述

我认为ModelState's Keys中的密钥与data-valmsg-for中的相应密钥(由Html.ValidationMessageFor或新标签帮助器{{1}生成)之间应该是一一对应的})。实际上,它们通常是匹配的,但是在涉及asp-validation-forEditorTemplate的某些情况下,它们将不同步。这是一个示例:

Partial view/page

第一种绑定情况是,ModelState的键与public class Editviewmodel { [required] public string Value {get;set;} } public class EditModel : PageModel { [BindProperty] public Editviewmodel Edit {get;set;} public Task<IActionResult> OnPostAsync(){ //check the ModelState here,I can see its Keys } } 中放置的生成键同步

data-valmsg-for

<form method="post"> <input asp-for="Edit.Value"/> <span asp-validation-for="Edit.Value"></span> <button>Submit</button> </form> 中包含的密钥为 Edit.Value 生成的用于验证消息的ModelState的{​​{1}}为 Edit.Value 也是

第二种绑定情况,ModelState的键与<span>生成的键不同步。在这里,我们不是直接在Razor页面中呈现data-valmsg-for,而是使用data-valmsg-for(名为input)的EditorTemplate,如下所示:

Editviewmodel

在“剃刀”页面中,我们只有这一行:

Editviewmodel.cshtml

一切正常,但是通过检查ModelState的键,我可以看到不同之处(这使我的自定义JS扩展代码停止工作)。

@model Editviewmodel <form method="post"> <input asp-for="Value"/> <span asp-validation-for="Value"></span> <button>Submit</button> </form> 中包含的密钥只是 Value ,而生成的用于验证消息的@Html.EditorFor(e => e.Edit); 仍然具有{strong> Edit.Value strong>。

所以我想知道这是否是设计使然?无论如何,这个不同步的问题确实给我写一个客户端JS扩展代码,以将ModelState的返回结果映射到生成的验证消息范围,确实给我带来了挑战。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)