Javascript解雇,没有我问它

时间:2014-01-03 22:46:48

标签: javascript asp.net-mvc

我有一个MVC4应用程序,在布局(老歌的母版页)上,我有一些javascript:

<script type="text/javascript">
        $(document).ready(function () {
            $('.btnSubmit').on('click', function () {
                var data = { username: $('.txtUsername').val(), password: $('.txtPassword').val(), rememberMe: $('.cbRemember').val() };

                $.ajax({
                    url: '@Url.Action("LoginUser", "User")',
                    type: "POST",
                    contentType: "application/json",
                    data: JSON.stringify(data),
                    cache: false,
                    async: true,
                    success: function (result) {
                        console.log(result.toString());
                        if (result.Success == 'true') {
                            window.location = '@Url.Action("Index", "Home")';
                        } else {
                            alert(result.Message);
                        }
                    },
                    error: function () {
                        alert("Error in input");
                    }

                });
            });
        });
    </script>

这只是登录用户。

这很好。

然而,在另一个屏幕上,我现在有一些新的javascript,它具有类似的功能,从表单中获取数据,并将其传递给控制器​​进行处理。

<script type="text/javascript">
        $(document).ready(function () {
            $('.btnSubmitNewCard').on('click', function () {
                var data = { cardNumber: $('.txtNewCardNumber').val(), cardHolder: $('.txtNewCardHolder').val(), expiryMonth: $('.txtNewExpiryMonth').val(), expiryYear: $('.txtNewExpiryYear').val(), active: $('.txtNewActive').val(), accountId: $('.Id').val() };

                $.ajax({
                    url: '@Url.Action("SaveBankCard", "BankAccount")',
                    type: "POST",
                    contentType: "application/json",
                    data: JSON.stringify(data),
                    cache: false,
                    async: true,
                    success: function (result) {
                        console.log(result.toString());
                        if (result.Success == 'true') {
                           // window.location = '@Url.Action("Index", "Home")';
                        } else {
                            alert(result.Message);
                        }
                    },
                    error: function () {
                        alert("Oh no");
                    }

                });
            });
        });
    </script>

当我点击此代码链接的保存按钮时,代码触发,控制器方法顺利进行,数据存储,但是当我刷新屏幕时,我收到一个“未确定”错误上面的登录脚本。重新加载页面似乎会触发。我不确定为什么要解雇。它应该只是加载,准备开火,但它似乎被调用,并失败。

它调用的控制器是:

public ActionResult SaveBankCard(string cardNumber, string cardHolder, int expiryMonth, int expiryYear, string active, int accountId)
{
    var card = new AccountCardDto
        {
            Id = 0,
            AccountId = accountId,
            Active = active == "on",
            CardHolderName = cardHolder,
            CardNumber = cardNumber,
            ExpiryDate = new DateTime(expiryYear, expiryMonth, 1)
        };

    int id = new BankAccountService().SaveCard(card);
    return RedirectToAction("EditBankAccount", new { bankAccountId = accountId });

}

问题发生在RedirectToAction上...当该视图重新加载时,包括布局,布局javascript会触发。

编辑:我现在看到这是两次触发的btnSubmitNewCard javascript。一旦click事件发生(预期),然后再发生回发。为什么第二个事件发生?

2 个答案:

答案 0 :(得分:0)

您在检查状态的行中获得未定义:

  

if (result.Success == 'true') {

因为result包含带有EditBankAccount操作视图的html响应的字符串,并且没有“Success”属性。 您可以在调试器中放置breakepoint并查看。你可以使用调试器;声明为断点

答案 1 :(得分:0)

检查: -

$('.btnSubmitNewCard').click(function () {...});