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();
}
});
});
});