首页 > 解决方案 > ASP.NET CORE Razor Pages:如何避免在页面刷新时第二次执行页面处理程序?

问题描述

当使用方法处理程序执行OnGetOnPost方法时,&handler=[action]会添加查询字符串。

问题是如果用户随后通过点击浏览器的刷新按钮手动刷新页面,相同的操作将在无意中第二次执行。

避免这种情况的推荐方法是什么?

标签: asp.net-coremethodshandlerrazor-pages

解决方案


问题是如果用户之后手动刷新页面,相同的操作将第二次执行。

对于浏览器刷新按钮点击事件,我们无法阻止。但是,作为一种解决方法,您可以在页面模型中定义一个 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>

截图如下:

在此处输入图像描述


推荐阅读