有人找到了在 Razor 页面上处理多个表单的技巧吗?
我的页面有两个表单,每个表单都有一个用 BindProperty
属性装饰的相应模型。
[BindProperty]
public TripDetailsUpdateDto UpdateTrip { get; set; }
[BindProperty]
public TripNoteUpdateDto UpdateNote { get; set; }
问题是,尽管其中任何一个单独工作都可以正常工作,但同时使用它们会导致 ModelState.IsValid
返回 false。两个模型是组合在一起的,当一个模型提交时,另一个模型的属性尚未设置。
当然,我不是第一个为此苦苦挣扎的人。有没有办法处理这种情况,而无需编写手动代码来从 ModelState
中删除未使用的项目?
最佳答案
因此,正如所建议的,问题在于用 [BindProperty]
修饰的每个模型的每个属性都被组合到 ModelState
中。
要解决此问题,请首先删除所有 [BindProperty]
属性。
然后使用参数绑定(bind)到您的值:
public async Task<IActionResult> OnPostUpdateNoteAsync(int noteId, TripNoteUpdateDto updateNote)
{
// ...
}
注释:
- 您仍然可以拥有原始模型成员(在我的例子中为
UpdateTrip
和UpdateNote
)。您仍然可以从标记中引用它们。这允许您的标记考虑验证属性,并且还允许您指定默认值。 - 如果您的标记引用原始模型成员,则您的模型参数必须具有相同的名称才能匹配。
关于c# - 在同一 Razor 页面上处理多个表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70294229/