javascript - 使用.Net Core MVC,如何将提交“按钮”的值传递给控制器,同时有一个确认对话框?
问题描述
我的问题似乎有点典型,但解决起来过于困难。基本上,我有一个带有两个提交按钮的表单。一个用于“保存”,一个用于“提交”。我还希望用户在继续提交之前得到一个确认对话框。下面是我所做的一个例子。
看法:
<form asp-action="Save">
<input type="submit" name="submitType" value="Save" class="btn btn-primary" />
<input type="submit" name="submitType" value="Submit" class="btn btn-primary" />
</form>
<script type="text/javascript">
$(document).ready(function () {
$( "form" ).submit(function (e) {
e.preventDefault();
var submitClicked = $("input[type=submit][clicked=true]").val();
if ($(this).valid()) {
if (submitClicked == "Save") {
$("form").unbind('submit').submit();
}
if (submitClicked == "Submit") {
if (confirm("Are you sure you are ready to Submit your document for Approval?")) {
$("form").unbind('submit').submit();
}
}
}
});
$("form input[type=submit]").click(function () {
$("input[type=submit]", $(this).parents("form")).removeAttr("clicked");
$(this).attr("clicked", "true");
});
});
</script>
控制器:
[HttpPost]
public async Task<IActionResult> Save(Document document, string submitType)
{
if (submitType == "Submit")
{
document.ApprovalLevel = 1;
}
}
现在确认工作没有缺陷,但由于某种原因,当使用 preventDefault() 和 unbind().submit() 时,它删除了提交按钮的输入值,所以我在控制器中得到了 submitType 的空值,因此提交失败。当我删除提出确认问题的 jquery 位时,提交按钮的输入值不会失败。如何在仍然知道使用哪个按钮提交给控制器的情况下实现确认问题有效的解决方案。
编辑(基于 Chris Pratt 的简单解释的解决方案):
看法:
<form asp-action="Save">
//ADDED Hidden Input Parameter
<input type="hidden" id="submitForApproval" name="submitForApproval" value="false" />
<input type="submit" name="submitType" value="Save" class="btn btn-primary" />
<input type="submit" name="submitType" value="Submit" class="btn btn-primary" />
</form>
<script type="text/javascript">
$(document).ready(function () {
$( "form" ).submit(function (e) {
e.preventDefault();
var submitClicked = $("input[type=submit][clicked=true]").val();
if ($(this).valid()) {
if (submitClicked == "Save") {
//ADDED jquery update to hidden input parameter
$('#submitForApproval').val(false);
$("form").unbind('submit').submit();
}
if (submitClicked == "Submit") {
if (confirm("Are you sure you are ready to Submit your document for Approval?")) {
//ADDED jquery update to hidden input parameter
$('#submitForApproval').val(true);
$("form").unbind('submit').submit();
}
}
}
});
$("form input[type=submit]").click(function () {
$("input[type=submit]", $(this).parents("form")).removeAttr("clicked");
$(this).attr("clicked", "true");
});
});
</script>
解决方案
提交按钮的值只有在实际提交表单时才会进入请求。在这里,您将停止原始提交,然后稍后手动提交,此时按钮不再负责,因此不会发送其值。
您最好的选择,因为无论如何您都在这里使用 JS,所以设置一个隐藏字段,其中包含单击时的值。
推荐阅读
- java - How return a generic array of
> in Java? - python - 为什么我在 Django 中的测试函数在 chrome 浏览器中正确显示页面时返回状态代码 404?
- wpf - wpf - 将自动生成的列数据网格绑定到值的属性
- algorithm - minimum greater number with different adjacent digits
- amazon-web-services - AWS IAM 全局条件键 aws:PrincipalOrgPaths 引发访问被拒绝
- python - 处理修改文件后提交更改
- mysql - Simple column change query doesn' work in MySQL 5.7
- amcharts - amchart条形图中类别轴标签的限制宽度
- javascript - dialog.showMessageBox not returning button index in electron main.js
- javascript - 如何使用 javascript 从 div 获取信息到另一个 div