【问题标题】:ASP.NET MVC does not fire jQuery Ajax POSTASP.NET MVC 不会触发 jQuery Ajax POST
【发布时间】:2015-09-30 11:58:24
【问题描述】:

我多次提出类似的解决方案,这就是为什么我真的很惊讶为什么这个解决方案不起作用。当我点击链接时,这应该通过 jQuery Ajax 向控制器提交数据。但是浏览器只是打开链接。

这里是控制器:

[HttpPost]
public async Task<JsonResult> Hide(int id)
{
    MailRepository mailRep = new MailRepository();
    var result = await mailRep.HideMail(id);
    if (result.Result == Enums.IsSuccess.Succes)
    {
        return Json(new { IsSuccess = true }, JsonRequestBehavior.AllowGet);
    }
    else
        return Json(new { IsSuccess = false, DataError = result.DataError }, JsonRequestBehavior.AllowGet);
}

这是 Razor 视图:

<a href="@Url.Action("Hide", "Mail", new {id = a.Id})" id="hide" title="hide e-mail" class="btn btn-warning"><i class="glyphicon glyphicon-eye-close"></i></a>

还有 jQuery:

$("#hide").on("click", function () {
    $.ajax({
        type: "POST",
        url: $(this).attr("href"),
        dataType: "json",
        data: {},
        success: function (data) {
            if (data.IsSuccess === true) {
                $("div.alert-success").removeClass("hidden");
                setTimeout(function () {
                    $("div.alert-success").addClass("hidden");
                }, 5000);
                window.location.reload();
            } else {
                $("#error").text(data.DataError);
                $("div.alert-warning").removeClass("hidden");
                setTimeout(function () {
                    $("div.alert-warning").addClass("hidden");
                }, 5000);
            }
        },
        error: function (request, status, error) {
            alert(request.responseText);
        }
    });
    return false;
});

【问题讨论】:

  • 响应如何?
  • 你的方法有一个参数int id,但是你没有传递任何东西给它
  • @Jai,我不知道,因为它只是打开的链接,并没有在服务器端触发任何东西。
  • 也许有一个语法错误阻止您的处理程序覆盖绑定?检查浏览器的调试器。当您单击链接时,您的处理程序是否会被调用?如果不是,那么它首先没有绑定到元素,并且与 AJAX 代码无关。 可能是在页面上存在元素之前尝试绑定处理程序一样简单,但我们无法从显示的代码中知道。
  • @andrey.shedko:然后活页夹没有绑定到元素。您是否尝试在页面上存在之前绑定元素?

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


【解决方案1】:

您正在通过一个名为#hide 的元素进行搜索,您需要确保在触发 jquery 事件时该元素已经存在。

如果元素不存在,那么您的 jquery Ajax 将无法工作。

【讨论】:

    【解决方案2】:

    解决方案简直是愚蠢的 - 选择 a#hide 而不是 #hide

    【讨论】:

    • 真的不应该有所作为。如果是这样,这表明您的标记可能正在重复使用 id 值,这是无效的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2018-03-18
    • 2021-07-10
    • 1970-01-01
    相关资源
    最近更新 更多