【发布时间】:2018-12-15 11:47:18
【问题描述】:
我是 implementing an example,基于 EF Core 和 RazorPages 执行简单的 CRUD。
现在特别是代表“列表”视图的第二页 (Index.cshtml)。每行包含一个button 元素以供删除。
来自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>
来自Products.cshtml.cs的片段
public async Task<IActionResult> OnPostDeleteAsync(int id)
{
var product = await _db.Products.FindAsync(id);
if (product != null)
{
//_db.Products.Remove(product);
//await _db.SaveChangesAsync();
}
return RedirectToPage();
}
到目前为止,它可以工作。我可以单击删除按钮,然后我看到成功重定向回页面。
现在我想使用 JavaScript 添加自定义确认功能。我可以在这种情况下使用 jQuery,所以我基本上拦截了所有 data-confirm 属性按钮并阻止默认操作,因此只有在用户确认时我才能提交。
$('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 提交?
【问题讨论】:
-
在执行
RedirectToPage时,您在浏览器开发工具(F12 > 网络选项卡)中看到了什么? -
我可以看到我犯了一个错误,它没有进入
OnPostDeleteAsync处理程序。网络选项卡在Products上显示500错误。没有我的data-confirm机制 RazorPages 发布到Products?id=11&handler=delete(所以我的机制不包括查询字符串部分)。我猜 RazorPages 有一个自定义客户端机制,可以将asp-属性转换为请求。所以基本上我的问题没有改变...... -
您能否展示完整的视图以及当前表单与删除按钮的关系?
-
为了简洁起见,我实际上把它省略了,但我把它放回去了。
-
我没有正确查看生成的源代码。该按钮实际上包含一个
formaction属性,我可以使用它在提交之前更改表单操作。
标签: jquery confirm razor-pages