Javascript重定向似乎只有在chrome调试器打开时才起作用

Javascript重定向似乎只有在chrome调试器打开时才起作用,javascript,jquery,asp.net-mvc,jquery-ui-dialog,Javascript,Jquery,Asp.net Mvc,Jquery Ui Dialog,我已经编写了一个jQueryUI对话框来弹出,作为对特定链接的确认。但是,这不会正确重定向到“我的删除”页面。但是,如果我在chrome中打开调试器进行调试,那么代码将按预期工作 我发现了同样的问题,但是解决方案似乎对我不起作用。但情况完全相同。问题在这里 所以我有我的链接 <div id="confirm-dialog"> <div class="dialog-inner"> <p id="confirm-dialog-message"&g

我已经编写了一个jQueryUI对话框来弹出,作为对特定链接的确认。但是,这不会正确重定向到“我的删除”页面。但是,如果我在chrome中打开调试器进行调试,那么代码将按预期工作

我发现了同样的问题,但是解决方案似乎对我不起作用。但情况完全相同。问题在这里

所以我有我的链接

<div id="confirm-dialog">
    <div class="dialog-inner">
        <p id="confirm-dialog-message"></p>
    </div>
</div>
<a href="/Customer/Delete/73865878346587" class="confirmLink" title="Delete Customer" data-confirm-message="Are you sure you want to delete this customer?">Delete</a>
因此,当我单击我的删除链接时,我确实会看到带有“是”和“否”按钮的确认对话框,css样式正确,并已捕获链接href并将其绑定到“是”按钮。如果我点击“否”,我会被踢回去,不会再发生任何事情-正确

如果我单击Yes,则需要发送给它捕获的原始href。我在重定向前单击Yes按钮时抛出了警报(theHref),它确实显示了正确的地址(/Customer/Delete/73865878346587),但重定向没有发生

当我打开chrome调试器调试javascript或查看是否出现任何错误时,一切都按预期工作,并正确重定向我

在IE中,它也不起作用

我试过

window.location.href = theHref
window.location = theHref
location.href = theHref
$(location).attr('href', theHref)
我也尝试过添加returnfalse;在我重新定向之后。什么都不管用

我在上面添加到同一问题的链接是为了确保“是”按钮在页面上呈现为。。。哪个是我的


有人能解释一下吗?

而不是
window.location.href=theHref

您是否尝试过
window.location.replace(theHref)


回到基础,尝试:
window.location=theHref

我已经找到了答案。Javascript是一条红鲱鱼

我确实尝试删除confirmlinkjquery类,这样该链接就只是一个标准链接,直接进入我的控制器来完成我的删除。当我做这个测试时,链接工作得非常好。因此,我指出了javascript的问题。然而,似乎情况并非如此,只有当Chrome中的调试器当时已经打开或已经打开时,调试器才会再次工作

当我再次访问non-confirm-link选项时,我发现它不能正常工作,因此指出问题不在于javascript

在MVC中,您似乎无法从HTML链接执行删除操作。这显然是因为涉及到安全风险,因为任何人都可以对Id执行删除。我在实现中考虑到了这一点,并添加了代码来检查请求来自何处,如果它不是来自我的列表页面,那么它会抛出一个错误,不会执行删除。我给我的控制器取什么名字也无关紧要,例如Test,执行我的httpget请求的链接永远不会遇到这个问题。必须有某种算法来确定操作正在做什么,并阻止您对HttpGet请求执行操作。有关删除操作的更多信息,请查看此帖子

您似乎只能通过HTTP Post来执行此操作,这意味着要么使用
Ajax.ActionLink
,要么使用表单和提交按钮。那么必须为HttpPost指定您的操作

如果像我一样,您希望将您的链接保持为HTML链接,那么您可以执行以下操作,即我所做的操作,代码如下。我保留了我的HTML链接,将其设置为指向我的HttpPost删除操作。为jquery添加了confirmLink类以将对话框绑定到。我选择link href并在jquery对话框中设置Yes按钮以动态创建表单,并将方法设置为post,将操作设置为links href。然后,我可以在动态创建的新表单上调用submit来执行我的Post-to-my-Delete操作

我的删除链接

Html.ActionLink("Delete", "Delete", "Caterer", new { id = caterer.Id }, new { @class = "mws-ic-16 ic-delete imageButton confirmLink", @data_confirm_title = "Delete " + caterer.Name, @data_confirm_message = "Are you sure you want to delete this caterer, " + caterer.Name + "?" })
我的Javascript

function LoadConfirm() {
    $('.confirmLink').click(function (e) {
        e.preventDefault();
        BodyScrolling(false);

        var actionHref = $(this).attr("href");
        var confirmTitle = $(this).attr("data-confirm-title");
        confirmTitle = confirmTitle == null ? "Confirm..." : confirmTitle;

        var confirmMessage = $(this).attr("data-confirm-message");
        confirmMessage = confirmMessage == null ? "Are you sure?" : confirmMessage;

        $("#confirm-dialog").dialog({
            autoOpen: false,
            modal: true,
            width: 400,
            closeOnEscape: true,
            close: function () { BodyScrolling(true); },
            title: confirmTitle,
            resizable: false,
            buttons: [
            {
                text: "Yes",
                class: "mws-button red",
                click: function () {
                    StartLoading();
                    $(this).dialog("close");
                    var form = document.createElement("form");
                    form.setAttribute("method", "post");
                    form.setAttribute("action", actionHref);
                    form.submit();
                }
            },
            {
                text: "No",
                class: "mws-button black",
                click: function () {
                    $("#confirm-dialog").dialog("close");
                    return false;
                }
            }
            ]
        });
        $("#confirm-dialog #confirm-dialog-message").html(confirmMessage);
        $("#confirm-dialog").parent().css({ position: "fixed" });
        $("#confirm-dialog").dialog("open");
    });
}
我的行动

    [HttpPost]
    [Authorize(Roles = "User")]
    public ActionResult Delete(long id)
    {
        //Perform my delete

        return RedirectToActionPermanent("List");
    }

其他浏览器呢?请参阅@Th3BFG、window.location=url或window.location.assign(url)的响应。我尝试过chrome、ie 8、9、10、Firefox。我尝试了其他建议,但仍然一无所获:(好的,这里有一些关于window.location=url不起作用的原因。这里的想法是,在所有现代浏览器中都应该如此。-他们禁用了JavaScript。-他们的浏览器本身不支持仅访问位置,您应该使用window.location。-您应该指定协议(即http://或https://)在你的window.location中,仅使用mydomain.com可以在某些浏览器中转换为/mydomain.com。-确保完整地址被传递到window.location函数。-等等。感谢回复。这仍然在开发中,不是一个bug。我在浏览器中启用了JS,我知道URL工作正常,我希望它是一个相对的e路径由于它没有进入我的域之外的其他地方,它只是指向我站点中另一个MVC操作的链接。我可以确认Javascript获取的链接href如预期的那样正确。最重要的是,当chrome调试器窗口打开时,这项工作非常正常。在我作为问题的一部分发布的链接中,其他人提到“继承人”按钮没有属于他们的类型。这一定与我的布局有关。
    [HttpPost]
    [Authorize(Roles = "User")]
    public ActionResult Delete(long id)
    {
        //Perform my delete

        return RedirectToActionPermanent("List");
    }