从JavaScript中静默传递参数到控制器操作(不使用AJAX)

时间:2017-06-20 19:50:55

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

我的问题可能不是最好的,但基本上我有一个可点击行的表。单击该行时,我希望它调用具有3个参数的控制器操作,并加载从该操作返回的视图。

这是我最近的失败尝试:

$(".clickable-row").on("click", function () {
    if (this.dataset.readOnly) {
        $.ajax({
            url: '/' + this.dataset.subNum + '/View/',
            type: "GET",
            data: {
                id: this.dataset.id,
                sub_num: this.dataset.subNum,
                edit_mode: false,
            }
        }).done(function (ViewResult) {
            $(".body-content").html(ViewResult);
        });
    } else {
        $.ajax({
            url: '/' + this.dataset.subNum + '/Edit/',
            type: "GET",
            data: {
                id: this.dataset.id,
                sub_num: this.dataset.subNum,
                edit_mode: true,
            }
        }).done(function (ViewResult) {
            $(".body-content").html(ViewResult);
        });
    }
})

这几乎可以工作,但页眉和页脚是重复的,因为返回的视图是整个页面(包括_Layout.cshtml)。当控制器操作完成时我很好用页面重新加载(我没有使用AJAX),但使用window.location.href = "/" + this.dataset.subNum + "/Edit/?id=" + this.dataset.id + "&sub_num=" + this.dataset.subNum + "&edit_mode=true"的问题是我不希望URL中的所有额外文本。我希望最终的网址为localhost:64692/{sub_num}/Edit/。有没有办法我可以静默地将这些参数传递给控制器​​动作而不使用AJAX调用?或者使用从AJAX调用返回的视图重新加载页面的方法?

修改仍未解决。我怀疑,此代码也不起作用:

$(".clickable-row").on("click", function () {
    var subNum = this.dataset.subnum;
    if (this.dataset.readOnly) {
        $.ajax({
            url: '/' + this.dataset.subnum + '/View/',
            type: "GET",
            data: {
                id: this.dataset.id,
                sub_num: this.dataset.subnum,
                edit_mode: false,
            },
            success: function (ViewResult) {
                window.location.href = '/' + subNum + '/View/'
            }
        });
    } else {
        $.ajax({
            url: '/' + this.dataset.subnum + '/Edit/',
            type: "GET",
            data: {
                id: this.dataset.id,
                sub_num: this.dataset.subnum,
                edit_mode: true,
            },
            success: function (ViewResult) {
                window.location.href = '/' + subNum + '/Edit/'
            }
        });
    }
})

因为success函数在id调用时没有将AJAX调用中的edit_modewindow.location.href值传递给控制器​​(这是有道理的 - 为什么它除非你指定这样做吗?)。我刚刚遇到的另一个问题是我猜测AJAX调用无法执行RedirectToAction调用,因为我在AJAX调用来自的操作中设置了断点,并且它没有重定向到正确的操作。因此,看起来AJAX调用似乎不是正确的方法。

是否可以将变量传递给JavaScript中的控制器操作而不将其附加到URL,就像您可以使用AJAX调用的data属性一样?我正在尝试满足一些规范,虚荣URL是高优先级。

0 个答案:

没有答案