【问题标题】:Javascript firing, without me asking it toJavascript触发,没有我要求它
【发布时间】:2014-01-03 22:46:48
【问题描述】:

我有一个 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。当点击事件发生(预期)时一次,然后在回发发生时再次发生。为什么会发生第二个事件?

【问题讨论】:

  • 为什么你首先要做 RedirectToAction 而不是使用纯表单/从 Java Script 手动重定向?顺便说一句,如果您根本不渲染它,那么该视图如何在 ajax 调用后重新加载?
  • 我对此很陌生。如果我做错了什么,一定要告诉。控制器方法大惊小怪,然后,我希望它基本上只是回到调用页面。我不确定你的第二个问题。
  • 默认情况下,您不能使用 ajax 请求进行重定向。您需要使用 javascript 手动执行此操作。 Ajax 请求将遵循 HTTP 302 重定向代码。看到这些问题:stackoverflow.com/questions/8436611/…dataplex.org/2009/11/asp-net-mvc-ajax-redirecttoactionstackoverflow.com/questions/5041899/…

标签: javascript asp.net-mvc


【解决方案1】:

检查一下:-

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢。我很困惑为什么该脚本甚至被执行,因为我的登录按钮没有被点击。
    • 啊,我发现实际上不是我的登录代码失败了,但重新加载页面时似乎触发了“btnSubmitNewCard”点击。我该如何防止这种情况?它在点击事件时触发,然后在页面重新加载时再次触发。
    • 为了使用调试器;声明您需要在浏览器中运行开发人员工具。例如,在 Internet Explorer 或 Firefox 中按 F12,然后您希望断点会被命中。
    猜你喜欢
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2020-01-18
    • 2019-11-02
    • 2012-01-02
    • 2019-09-14
    • 1970-01-01
    相关资源
    最近更新 更多