我的问题可能不是最好的,但基本上我有一个可点击行的表。单击该行时,我希望它调用具有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_mode
或window.location.href
值传递给控制器(这是有道理的 - 为什么它除非你指定这样做吗?)。我刚刚遇到的另一个问题是我猜测AJAX调用无法执行RedirectToAction
调用,因为我在AJAX调用来自的操作中设置了断点,并且它没有重定向到正确的操作。因此,看起来AJAX调用似乎不是正确的方法。
是否可以将变量传递给JavaScript中的控制器操作而不将其附加到URL,就像您可以使用AJAX调用的data属性一样?我正在尝试满足一些规范,虚荣URL是高优先级。