javascript - 通过 javascript 提交时 MVC 会丢失值

标签 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;
                    }
                }
            }
        });
    });

在我的 Controller 中,我试图捕获提交按钮的值,如下所示:

 [HttpPost]
        public ActionResult SubmitProject(ProjectModel m, string submitButton)
        {
}

如果我没有那个preventDefault行,我可以看到 Controller 中submitButton的值。对于preventDefault,该值始终为空。 这是我在尝试学习 MVC 时一直在努力解决的问题。如果我没有任何客户端交互,我会没事的。但试图让 js 与 mvc 一起玩却让我感到头疼。我做错了什么?

最佳答案

表单仅回发所单击的提交按钮的名称/值对。在您的情况下,您取消按钮 .click() 事件,然后调用 .submit() 函数(即提交不再由点击触发,因此其值为未在请求中发送)。

不要调用 e.preventDefault();,而是调用返回 truefalse 的函数,就像您可以使用 javascript .confirm() 函数取消表单提交(即 return recognize("...");

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

关于javascript - 通过 javascript 提交时 MVC 会丢失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37265826/

相关文章:

asp.net - 如何对外部依赖项使用依赖项注入(inject)?

jquery - 新的 ASP.NET MVC 3 应用程序、浏览器注意事项

asp.net - asp.net 3.5 是否支持单个页面上的多个表单?

asp.net-mvc - 使用 GET 的 MVC AttributeRouting - 返回 405 - 方法不允许

asp.net-mvc - 带有 ModelStateWrapper 的 Controller ModelState

javascript - 如何进行 d3js 树设计

javascript - TinyMCE 生成随机 <g> 标签?

php - 不使用 Flash/Silverlight 的 2 人游戏连接

javascript - 如何检查日子是否是日复一日?

javascript - NPM 包 - LF 或 CRLF 或自动行结尾?