【发布时间】:2021-04-10 14:30:28
【问题描述】:
我正在使用 ASP.Net Core 3.1/EF Core Web 应用程序。
问题在于“创建”页面。用户填写 Razor Web 表单并点击“提交”。服务器在“Pages\MyFunction\Create.cshtml.cs”中执行 OnPostAsync()。反过来,OnPostAsync() 不只是“SaveChangesAsync()”发布的数据。它查询其他一些单独的数据(“等待”),进行一些计算,然后最终创建新记录。然后退出:return RedirectToPage("./Index");
问题:
这可能需要一些时间。
用户仍然坐在“创建”页面。
他/她可以再次点击“提交”。然后再次。创建多个重复记录。
问:我有哪些选择可以缓解这种情况?
【问题讨论】:
-
您希望它做什么,给出错误消息?您是否可以实现“发布/重定向/获取”模式,其中“获取”页面轮询要完成的操作?
-
所以,数据库有这些叫做主键的东西..
-
用户界面反馈?一旦他们单击提交按钮,就禁用它并将其更改为微调器,以便他们知道它正在工作。
-
一些建议,使用异步,让最终用户知道,请求已提交,(如果有页面可以重定向用户,执行此操作或禁用提交按钮),确保您的数据库使用主键,如果项目不存在,在提交到数据库之前验证,在请求完成时向最终用户发出通知,包括如果项目已经存在的反馈
-
@Nonik:谢谢。碰巧的是,我 am 使用异步(当我发布完成的表单时),但在“创建”记录并退出“OnPostAsync()”之前需要发生某些事情。因此问题。是的,我的 EF 记录 DOES 有一个 PK ......但是(明智的 Caius Jard 似乎已经忘记了)它在 .SaveChangesAsync() 之前未初始化。所以它不能帮助我区分“第一个”和“后续的重复”请求。问:还有什么建议吗?问:关于如何/在哪里“禁用”客户端的提交按钮(以不“破坏”用户体验或客户端验证的方式)有什么想法吗?
标签: c# asp.net-core async-await