javascript - 在asp.net mvc中 Controller 函数调用两次

标签 javascript jquery asp.net ajax asp.net-mvc

当我单击“保存”按钮来保存我的 Controller 功能时,会触发两次。我不知道我的代码有什么问题。请帮助我。

这是我单击按钮来调用 ajax 并保存值。

<button id="btnSave" type="submit" title="Save" class="btn btn-success" onclick="getPage('@(Url.Action("Save", "Carriers"))')">
    <span class="glyphicon glyphicon-floppy-disk"></span>Save
</button>

这是我的ajax

$.ajax({
    type: "POST",
    url: page,
    data: $("#frmEdit").serialize(),
    xhrFields: {
        withCredentials: true
    },
    success: function (html) {
        $('#CarrierList').empty();
        $('#CarrierList').append($.parseHTML(html));
    },
    error: function () {
        var error = "Error occured during loading Carrier items...";
        $('#errorMessage').empty();
        $('#errorMessage').append(error);
        $('#errorModal').modal('show');
    },
    complete: function () {
        $('#loaderImg').modal('hide');
    }
});
}

这是我的 Controller 方法

public override ActionResult Save(CarrierDTO carrierDTO)
{
    string[] ErrorMessageArray = new string[4];
    int errorIndex = 0;
    if (ModelState.IsValid)
    {
        MessageCollection messages = new MessageCollection();
        carrierDTO.Save(ref messages);
        if (messages.IsErrorOccured() || messages.IsExceptionOccured())
        {
            ModelState.AddModelError("", messages[0].Text);
            return View("Edit", carrierDTO);
        }
        return View("Edit", carrierDTO);
    }

最佳答案

您需要添加“preventDefault()”。

If the prevent default method is called, the default action of the event will not be triggered.

在您的情况下,阻止默认值将停止提交表单(提交按钮的默认操作),并使用 ajax 代码片段来执行此操作。

JQ:

  $(function(e){
        e.preventDefault();
        $.ajax({
            type: "POST",
            url: page,
            data: $("#frmEdit").serialize(),
            xhrFields: {
                withCredentials: true
            },
            success: function (html) {
                $('#CarrierList').empty();
                $('#CarrierList').append($.parseHTML(html));
            },
            error: function () {
                var error = "Error occured during loading Carrier items...";
                $('#errorMessage').empty();
                $('#errorMessage').append(error);
                $('#errorModal').modal('show');
            },
            complete: function () {
                $('#loaderImg').modal('hide');
            }
        });
        }
        });

关于javascript - 在asp.net mvc中 Controller 函数调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29674447/

相关文章:

c# - Microsoft Razor Syntax 如何在不向客户端公开的情况下运行服务器端代码?

javascript - JavaScript 中的 "Variable"变量

javascript - React 函数式组件(不再使用类组件)内部的箭头函数和常规函数有什么区别?

javascript - jquery - ajax 响应中的按钮 - 单击无响应

jQuery textillate.js,在动画之前隐藏文本。解决方案不起作用

c# - asp.net如何计算数据表列的总和?

javascript - 使用 styled-components 来居中 React Bootstrap Modal

javascript - 如何将 Display None 属性添加到 Img 标签

java - 在 JQuery JSP 中引用传入的参数

asp.net - VS2010中切换到aspx代码的热键