MVC在通过javascript提交时失去价值

时间:2016-05-17 01:46:37

标签: javascript asp.net-mvc

我有一个带提交按钮的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一起玩是让我听到的。我做错了什么?

1 个答案:

答案 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个提交按钮。