如何解决ModelState的键与生成的data-valmsg-for之间不同步?
我认为ModelState's Keys
中的密钥与data-valmsg-for
中的相应密钥(由Html.ValidationMessageFor
或新标签帮助器{{1}生成)之间应该是一一对应的})。实际上,它们通常是匹配的,但是在涉及asp-validation-for
或EditorTemplate
的某些情况下,它们将不同步。这是一个示例:
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 举报,一经查实,本站将立刻删除。