我有一个带提交按钮的MVC表单:
<form method="POST" id="submitProject" action="@Url.Action(SubmitProject, "ProjectSummary")">
<button type="submit" name="submitButton" id="submitProject" value="saveToProposed" class="btn btn-primary">Submit Project</button>
</form>
但是当用户点击该按钮时,我希望在帖子开始之前向他们显示确认对话框:
$('#submitProject').submit(function (e) {
var currentForm = this;
e.preventDefault();
bootbox.dialog({
message: "Approve or Reject",
title: "Project Approval",
buttons: {
success: {
label: "Approve",
className: "btn-success",
callback: function () {
alert("Approved");
currentForm.submit();
}
},
danger: {
label: "Reject",
className: "btn-danger",
callback: function () {
alert("Rejected");
currentForm.submit();
}
},
main: {
label: "Cancel",
className: "btn-primary",
callback: function () {
return true;
}
}
}
});
});
在我的控制器中,我试图捕获提交按钮的值,如下所示:
[HttpPost]
public ActionResult SubmitProject(ProjectModel m, string submitButton)
{
}
如果我没有那个preventDefault行,我可以在控制器中看到submitButton的值。使用preventDefault时,该值始终为null。 当我尝试学习MVC时,这是我一直在努力的事情。如果我没有任何客户端互动,我会没事的。但试图让js与mvc一起玩是让我听到的。我做错了什么?
答案 0 :(得分:1)
表单仅回发其单击的提交按钮的名称/值对。在您的情况下,您取消按钮.click()
事件,然后调用.submit()
函数(即点击不再触发提交,因此请求中不会发送其值)。
调用返回e.preventDefault();
或true
的函数,而不是调用false
,就像使用javascript .confirm()
函数取消表单提交一样(即return confirm("...");
function confirmSubmit()
{
bootbox.dialog({
....
// for the success and danger buttons - return true;
// for the main button - return false
buttons: {
success: {
label: "Approve",
className: "btn-success",
callback: function () {
return true;
}
},
....
});
}
$('#submitProject').submit(function (e) {
return confirmSubmit();
});
附注:您的表单只有一个提交按钮,因此string submitButton
的值只会是"saveToProposed"
。不确定你是否从代码中省略了它,但我认为你真的至少有2个提交按钮。