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

如何点击后禁用Razor提交按钮并使表单POST至对应页面处理器

Razor页面多提交按钮:禁用按钮并提交到对应处理器

核心逻辑说明

Razor的asp-page-handler属性会自动给按钮加上name="handler"和value="对应处理器名"的属性,点击提交按钮时,浏览器会把这个按钮的handler参数一起POST到后端,后端就能自动匹配到对应的OnPostXXXAsync方法。所以不用手动修改表单的action,只需要处理按钮禁用和防止重复提交的逻辑即可。

实现代码

原生JS版本

给每个提交按钮绑定点击事件,点击后禁用自身:

<form id="editBudgetForm" method="post">
    <button type="submit" id="btnSaveRevenue" class="btn btn-primary" asp-page-handler="BudgetRevenue" title="Save the budget revenue.">
        Save Revenue
    </button>
    <button type="submit" id="btnSaveExpense" class="btn btn-primary" asp-page-handler="BudgetExpense" title="Save the budget expense.">
        Save Expense
    </button>
</form>

<script>
    document.querySelectorAll('#editBudgetForm button[type="submit"]').forEach(btn => {
        btn.addEventListener('click', function() {
            this.disabled = true;
            this.textContent = 'Saving...'; // 可选,给用户提交中的反馈
        });
    });
</script>

jQuery版本

如果习惯用jQuery,代码更简洁:

<form id="editBudgetForm" method="post">
    <button type="submit" id="btnSaveRevenue" class="btn btn-primary" asp-page-handler="BudgetRevenue" title="Save the budget revenue.">
        Save Revenue
    </button>
    <button type="submit" id="btnSaveExpense" class="btn btn-primary" asp-page-handler="BudgetExpense" title="Save the budget expense.">
        Save Expense
    </button>
</form>

<script>
    $('#editBudgetForm').on('click', 'button[type="submit"]', function() {
        $(this).prop('disabled', true).text('Saving...');
    });
</script>

重要提醒

你的后端代码里OnPostBudgetExpensesAsync多了个s,需要改成OnPostBudgetExpenseAsync,和按钮的asp-page-handler="BudgetExpense"对应,否则后端找不到匹配的处理器方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:35:41