c# - 在同一 Razor 页面上处理多个表单

标签 c# asp.net asp.net-core razor-pages .net-6.0

有人找到了在 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)
{
    // ...
}

注释:

  1. 您仍然可以拥有原始模型成员(在我的例子中为 UpdateTripUpdateNote)。您仍然可以从标记中引用它们。这允许您的标记考虑验证属性,并且还允许您指定默认值。
  2. 如果您的标记引用原始模型成员,则您的模型参数必须具有相同的名称才能匹配。

关于c# - 在同一 Razor 页面上处理多个表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70294229/

相关文章:

android - 组织面向跨平台的网络服务的正确方法是什么?

c# - 在 Razor 中增加索引计数器

c# - UWP 从字符串写入(和读取)文件夹中的文件

c# - 在 .NET MVC 2 中创建图形面包屑或进程跟踪

asp.net - ASP.NET 5 中使用 OAuthBearerAuthentication 的 JWT 身份验证

asp.net - 匿名访问(IIS)和SQL Server

asp.net-core - 将数组传递给 asp net core web api 操作方法 HttpGet

reactjs - 在 ASP.NET Core API 中处理 id_token

c# - 在 C# 中构建服务器端自动完成

c# - 正则表达式从一长串没有分区的代码中拆分不同的代码