asp.net-core - ASP.NET CORE Razor Pages:如何避免在页面刷新时第二次执行页面处理程序?
问题描述
当使用方法处理程序执行OnGet
或OnPost
方法时,&handler=[action]
会添加查询字符串。
问题是如果用户随后通过点击浏览器的刷新按钮手动刷新页面,相同的操作将在无意中第二次执行。
避免这种情况的推荐方法是什么?
解决方案
问题是如果用户之后手动刷新页面,相同的操作将第二次执行。
对于浏览器刷新按钮点击事件,我们无法阻止。但是,作为一种解决方法,您可以在页面模型中定义一个 TriggerCount 属性,并使用隐藏字段将值存储在表单中,然后在处理程序方法中,获取隐藏字段值并根据计数做一些事情。代码如下:
.cshtml.cs 页面中的代码:
public void OnPostDelete()
{
if (Request.Form["TriggerCount"].Count > 0)
{
TriggerCount = Convert.ToInt32(Request.Form["TriggerCount"]);
TriggerCount++;
}
if (TriggerCount < 2)
{
// do something.
Message = "Delete handler fired, Count:" + TriggerCount;
}
else
{
Message = "Over 2 times";
}
}
.cshtml 页面中的代码:
@page
@model RazorPageSample.Pages.HandlerPageModel
@{
}
<div class="row">
<div class="col-lg-1">
<form asp-page-handler="edit" method="post">
<button class="btn btn-default">Edit</button>
</form>
</div>
<div class="col-lg-1">
<form asp-page-handler="delete" method="post">
<input type="hidden" asp-for="TriggerCount" />
<button id="btndelete" disabled="@(Model.TriggerCount>=1?true:false)" class="btn btn-default">
Delete
</button>
</form>
</div>
</div>
<h3 class="clearfix">@Model.Message</h3>
截图如下:
推荐阅读
- python - Memoization 无法正常工作,来自 MIT 开放课件“计算机科学与编程导论”第 21 课的 python 代码
- javascript - 从位置 0 javascript 的内部对象获取值
- postgresql - PostgreSQL - pgAdmin 4 - COPY 命令不适用于 Schema
- python - 在 Python 中清理时间序列数据并标准化采样率
- flutter - 如何忽略小部件的鼠标悬停事件?
- ms-word - Office Js:避免在功能区按钮工具提示上加倍“&”符号
- css - CSS:-webkit-appearance:menulist Dropdown(选择标签),如何给箭头填充?
- ocaml - 提示输入字符串并读取,然后在 OCaml 中显示
- javascript - nodeJS ReferenceError:未定义导航器
- python - Django 排序列表