You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Razor页面嵌入的Razor组件内HTML提交按钮如何点击后禁用防重复提交

解决方案

以下两种实现方案都可以解决重复提交问题,优先推荐使用Razor组件原生的状态绑定方案,无需手动获取DOM操作句柄,符合Blazor开发规范。

方案1:组件状态绑定实现(推荐)

通过组件内部状态直接控制按钮禁用状态,逻辑更简洁易维护:

第一步:修改CustomerPreviewRequest组件代码

  1. 组件@code块新增状态变量、提交回调参数和处理逻辑:
@code {
    // 控制提交按钮禁用状态
    private bool _isSubmitting = false;

    // 提交事件回调,用于触发父页面的保存逻辑
    [Parameter]
    public EventCallback OnSubmit { get; set; }

    private async Task HandleFormSubmit()
    {
        // 拦截重复点击
        if (_isSubmitting) return;

        _isSubmitting = true;
        try
        {
            // 调用父页面的数据库保存逻辑
            await OnSubmit.InvokeAsync();
        }
        finally
        {
            // 若提交失败后需要允许用户重新提交,可取消注释下方代码;提交成功后跳转页面的场景无需设置
            // _isSubmitting = false;
        }
    }

    // 保留你原有组件的其他逻辑
}
  1. 修改组件内的按钮代码,绑定禁用状态和点击事件:
<button aria-label="Submit Request." type="submit" class="login100-form-btn" style="background-color:#1a2b57"
        tabindex="0" id="submitForm" disabled="@_isSubmitting" @onclick="HandleFormSubmit">
    Submit Request
</button>

第二步:修改父页面CreateForm的组件引用

给嵌入的CustomerPreviewRequest组件新增OnSubmit参数,绑定你原有数据入库的方法即可:

<CustomerPreviewRequest HeadingToShow="@HeadingToShowPreviewCustomerScreen"
                        onBack="MoveToPreviousPage"
                        CurrentCustomerSubmission="@_model"
                        OnSubmit="SaveCustomerToDatabase">
</CustomerPreviewRequest>

上面代码中的SaveCustomerToDatabase就是你原本实现数据保存到数据库的业务方法。

方案2:DOM句柄操作实现(不推荐)

如果你确实需要直接获取按钮的操作句柄,可以通过ElementReference结合JS互操作实现:

  1. 在CustomerPreviewRequest组件的@code块添加如下代码:
@code {
    // 按钮DOM引用
    private ElementReference _submitBtn;
    // 注入JS运行时
    [Inject]
    private IJSRuntime JSRuntime { get; set; }

    private async Task HandleFormSubmit()
    {
        // 点击后直接禁用按钮
        await JSRuntime.InvokeVoidAsync("eval", "arguments[0].disabled = true", _submitBtn);
        
        // 后续提交逻辑...
    }
}
  1. 给按钮添加@ref绑定关联引用:
<button @ref="_submitBtn" aria-label="Submit Request." type="submit" class="login100-form-btn" style="background-color:#1a2b57"
        tabindex="0" id="submitForm">
    Submit Request
</button>

内容的提问来源于stack exchange,提问作者GettingStarted

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:09:03