javascript - Ajax.BeginForm 中的两个提交按钮。需要在OnSuccess中调用不同的js函数

标签 javascript asp.net-mvc-4

我的 MVC 页面上有一个 Ajax 表单,带有两个单独的提交按钮...

@using (Ajax.BeginForm("Save", "Company", new AjaxOptions() {
    HttpMethod="Post", OnSuccess="closeForm" 
}, new {@id = "companyEditForm"})) {
    ....some edit fields......

    <input type="submit" value="Save & Next"/>
    <input type="submit" value="Save" />
}

我想在使用“保存并下一步”按钮提交表单后调用不同的 js 函数。因此,如果用户单击“保存”按钮,则应提交表单,然后调用“closeForm”javascript 函数。如果用户单击“保存并下一步”按钮,则应提交表单,然后调用“nextForm”javascript 函数。有实现此目的的简单方法吗?

最佳答案

Is there a simple way of achieving this?

不,但是您可以让 Controller 操作传递在结果中单击的按钮。这可以作为 Json 属性(如果您返回 JSON)来完成,也可以是自定义响应 HTTP header 。

然后在您的成功回调(只能是一个)中,您可以检索此值以了解单击了哪个按钮并采取相应行动。

因此,首先为您的提交按钮命名,以便您知道点击了哪个按钮:

@using (Ajax.BeginForm("Save", "Company", new AjaxOptions() {
    HttpMethod="Post", OnSuccess="onSuccess" 
}, new { id = "companyEditForm" })) {
    ....some edit fields......

    <button type="submit" name="btn" value="save_next">Save &amp; Next</button>
    <button type="submit" name="btn" value="save">Save</button>
}

然后在你的 Controller Action 中

[HttpPost]
public ActionResult Save(MyViewModel model)
{
    Response.AppendHeader("X-Button", Request["btn"]);

    ... your usual processing
}

最后在您的 onSucecss 回调中:

function onSuccess(data, status, xhr) {
    function onSuccess(data, status, xhr) {
        var btn = xhr.getResponseHeader('X-Button');
        if (btn == 'save_next') {
            // The "Save & Next" button was clicked
        } else if (btn == 'save') {
            // The "Save" button was clicked
        } else {
            // The user didn't submit the form by using the mouse and
            // clicking on a button, he simply pressed Enter while 
            // inside some text field or you have some other portion of
            // javascript which triggered the form submission without pressing
            // on any submit button
        }
    }
}

关于javascript - Ajax.BeginForm 中的两个提交按钮。需要在OnSuccess中调用不同的js函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14980483/

相关文章:

c# - 在 cshtml 页面上使用 Jquery.get() 并发布 .CS 文件

.net - 我如何让 WebAPI 拒绝带有无效负载的请求?

c# - 使用带有多个参数的NEST进行 Elasticsearch

javascript - 使用 FileReader 导入 javascript 文件时如何保留换行符?

javascript 如何从对象变量返回数字

javascript - 在 React.js 中,为什么我们不必传递参数事件处理函数?

JavaScript ajax请求servlet调用错误回调函数

c# - 使用身份提供者在 asp.net mvc 4 应用程序中添加角色

c# - Web API 2 路由属性不起作用

javascript - JSON 源映射破坏了 Webstorm 调试过程中的解析器