Jquery 由于Javascript拦截,未执行RazorPages后处理程序机制

Jquery 由于Javascript拦截,未执行RazorPages后处理程序机制,jquery,confirm,razor-pages,Jquery,Confirm,Razor Pages,我基于EF-Core和RazorPages执行简单CRUD 现在特别是第2页(Index.cshtml),表示“列表”视图。每行包含一个用于删除的按钮元素 来自Products.cshtml <form method="POST"> @foreach(var product in Model.Products) { <button type="submit" asp-page-handler="delete" asp-route-id="@produc

我基于
EF-Core
RazorPages
执行简单CRUD

现在特别是第2页(Index.cshtml),表示“列表”视图。每行包含一个用于删除的
按钮
元素

来自
Products.cshtml

<form method="POST">

    @foreach(var product in Model.Products) {
        <button type="submit" asp-page-handler="delete" asp-route-id="@product.Id">delete</button>
        <!-- the one below doesn't work with my custom Javascript -->
        <!-- <button data-confirm type="submit" asp-page-handler="delete" asp-route-id="@product.Id">delete</button> -->
    }

</form>
到目前为止,它仍然有效。我可以单击“删除”按钮,看到成功重定向回页面。

现在我想使用Javscript添加一个自定义确认功能。我可以在这个上下文中使用jQuery,因此我基本上截取了所有
数据确认
属性按钮,并阻止默认操作,因此我只能在用户确认的情况下提交

$('button[data-confirm]').each(function() {
     var currentElement = this;
     var currentForm = currentElement.form;
     $(currentElement).click(function (e) {
         e.preventDefault();
         var confirmValue = $(currentElement).attr('data-confirm');
         var confirmText = confirmValue ? confirmValue : 'Are you sure?';

         bootbox.confirm(confirmText, function (result) {
             if (result) {
                 currentForm.submit();
             }
         });
    });        
});

使用我的新功能,
RazorPage
机制不会调用
OnPostDeleteAsync
。。。我应该如何“手动”提交表单以符合RazorPages提交的要求?

我基本上必须考虑
按钮上生成的
表单
属性。将此值设置为表单操作使其工作

$('button[data-confirm]').each(function() {
    var currentElement = this;
    var currentForm = currentElement.form;
    $(currentElement).click(function (e) {
        e.preventDefault();
        var confirmValue = $(currentElement).attr('data-confirm');
        var confirmText = confirmValue ? confirmValue : 'Are you sure?';
        var formAction = $(currentElement).attr('formaction');   //ADDED THIS LINE

        bootbox.confirm(confirmText, function (result) {
            if (result) {
                currentForm.action = formAction;                 //ADDED THIS LINE
                currentForm.submit();
            }
        });
    });        
});

执行
RedirectToPage
时,您在浏览器开发工具(F12>网络选项卡)中看到了什么?我可以看出我犯了一个错误,它没有进入
OnPostDeleteAsync
处理程序。网络选项卡显示
产品上的
500
错误。没有我的
数据确认
机制RazorPages发布到
产品?id=11&handler=delete
(因此我的机制不包括查询字符串部分)。我猜RazorPages有一个定制的客户端机制,可以将
asp-
属性转换为请求。所以本质上我的问题没有改变…你能展示完整的视图以及当前表单与删除按钮的关系吗?我实际上为了简洁起见把它省略了,但我把它放回去了。我没有正确地查看生成的源代码。该按钮实际上包含一个
formaction
属性,我可以在提交表单操作之前使用该属性来更改表单操作。
$('button[data-confirm]').each(function() {
    var currentElement = this;
    var currentForm = currentElement.form;
    $(currentElement).click(function (e) {
        e.preventDefault();
        var confirmValue = $(currentElement).attr('data-confirm');
        var confirmText = confirmValue ? confirmValue : 'Are you sure?';
        var formAction = $(currentElement).attr('formaction');   //ADDED THIS LINE

        bootbox.confirm(confirmText, function (result) {
            if (result) {
                currentForm.action = formAction;                 //ADDED THIS LINE
                currentForm.submit();
            }
        });
    });        
});