ASP.NET Core – Razor Pages 冷知识


Multiple Form Binding 问题

在一个 page 里面有 2 张 form, 那么就会有 2 个 model binding. 当任何一个 submit 的时候.

由于 2 个 model 都属于 page, 检测 model valid 的时候 2 个都会检查. 当然其中 1 个肯定是 invalid 的咯.

这就是它的问题了.

Razor Pages - Model validation fails due to multiple objects sharing parameters

How to implement two forms with separate BindProperties in Razor Pages?

没有什么 right way. 

方案1: 用 ViewComponent 封装 form, 这样就可以隔离开了. 缺点就是麻烦.

方案2: 用 FluentValidation API 来做 validation, 而不是 ModelState.IsValid. (我目前就用这招)

Form Handler 覆盖掉 Query Params

当有 set asp-page-handler 的时候, post url 会加上 ?handler="HandlerName", 但它不会携带当前的其它 query params.

github issue: Adding asp-page-handler to Razor Page button removes query parameters from being submitted

这个是 "by design". 

解决方案是: 自己补上像携带的 query params, 比如 asp-route-foo='@HttpContext.Request.Query["foo"]'. 如果只是 1, 2 个已知 params 那就还算可控, 如果多的话这个方案就不够用了. 需要更多的工作.

相关