【问题标题】:Two submit buttons in Ajax.BeginForm. Need to call different js functions in OnSuccessAjax.BeginForm 中的两个提交按钮。 OnSuccess中需要调用不同的js函数
【发布时间】:2017-04-07 17:51:34
【问题描述】:

我的 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 函数。有没有一种简单的方法来实现这一点?

【问题讨论】:

    标签: javascript asp.net-mvc-4


    【解决方案1】:

    有没有简单的方法来实现这一点?

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

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

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

    @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>
    }
    

    然后在你的控制器动作中

    [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 onSuccess 函数中得到未定义的“状态,xhr”值。我错过了什么吗?
    • 我应该使用哪个 jquery 库?
    【解决方案2】:

    您可以从 Ajax.BeginForm() 切换到 Html.BeginForm(),然后使用 JQuery 提交您的表单。

    <script type="text/javascript">
    $('#save').on('click', function () {
        var form = $('form');
    
        $.ajax({
            url: form.attr('action'),
            type: 'post',
            data: form.serialize(),
            success: function (result) {
    
                // call another function
            }
        });
    
        return false;
    });
    
    $('#saveAndEdit').on('click', function() {
    
        $.ajax({
            url: form.attr('action'),
            type: 'post',
            data: form.serialize(),
            success: function (result) {
    
                // call another function
            }
        });
    
        return false;
    });
    </script>
    

    【讨论】:

      【解决方案3】:

      你也可以这样写:

      @using (Ajax.BeginForm("Save", "Company", new AjaxOptions() {
          HttpMethod="Post", OnSuccess="closeForm" 
      }, new { id = "companyEditForm" })) {
      
          <input type="submit" onclick="showNextForm = true;">Save & Next</button>
          <input type="submit" onclick="showNextForm = false;">Save</button>
      }
      

      ...

      var showNextForm = false;
      
      function closeForm(data) {
          if(showNextForm) {
              nextForm();
          }
          else {
              // do your stuff
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-11-09
        • 2013-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-28
        • 1970-01-01
        • 2013-01-14
        • 2018-12-06
        相关资源
        最近更新 更多