当控制器返回时,从javascript在新选项卡中打开视图
我需要在控制器成功后打开一个新选项卡,控制器返回一个视图 这是我的方法,但不起作用:当控制器返回时,从javascript在新选项卡中打开视图,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,我需要在控制器成功后打开一个新选项卡,控制器返回一个视图 这是我的方法,但不起作用: function modify(){ var1= someDataFromDOM; var2= anotherDataFromDOM; $.ajax({ method: 'POST', url: '@Url.Action("ModifyObject", "ControllerName")', data: {id: var1, status: var2}, succ
function modify(){
var1= someDataFromDOM;
var2= anotherDataFromDOM;
$.ajax({
method: 'POST',
url: '@Url.Action("ModifyObject", "ControllerName")',
data: {id: var1, status: var2},
success: function (data){
var newTab = window.open("", "_blank", "", true);
newTab.document.body.innerHTML = data;
}
});
}
在控制器上
[HttpPost]
public ActionResult ModifyObject(int id, string status)
{
ViewModelA model = new ViewModelA();
model = bd.GetModelA(id, status);
return View("ModifyObject", model);
}
控制器正确返回视图,但newTab变量的值为null
欢迎提供任何帮助我认为问题出在javascript
窗口。open()
上。除用户事件外,此功能被浏览器阻止。看到和
以下是我已经测试过的用于您目的的变通方法
<input type="button" hidden="hidden" id="hack" />
$(function () {
var var2 = "test";
var var1 = 1;
var htmlData;
var win;
$.ajax({
method: 'POST',
url: '@Url.Action("ModifyObject", "Controller")',
data: { id: var1, status: var2 },
success: function (data) {
htmlData = data;
$("#hack").trigger("click");
}
});
$("#hack").on("click", function () {
win = window.open("", "_blank");
win.document.body.innerHTML = htmlData;
});
});
更新
根据你的评论试试这个
function modify()
{
var grid = $("#datagrid").data("kendoGrid");
var row = grid.getSelectedRow();
var win = window.open("","_blank")
var var1 = row.fieldID;
var var2 = row.fieldStatus;
var url = '@Url.Action("ModifyObject", "ControllerName")' + '?id=' + var1 + '&status=' + var2;
win.location = url;
}
我认为问题出在javascript
window.open()
上。除用户事件外,此功能被浏览器阻止。看到和
以下是我已经测试过的用于您目的的变通方法
<input type="button" hidden="hidden" id="hack" />
$(function () {
var var2 = "test";
var var1 = 1;
var htmlData;
var win;
$.ajax({
method: 'POST',
url: '@Url.Action("ModifyObject", "Controller")',
data: { id: var1, status: var2 },
success: function (data) {
htmlData = data;
$("#hack").trigger("click");
}
});
$("#hack").on("click", function () {
win = window.open("", "_blank");
win.document.body.innerHTML = htmlData;
});
});
更新
根据你的评论试试这个
function modify()
{
var grid = $("#datagrid").data("kendoGrid");
var row = grid.getSelectedRow();
var win = window.open("","_blank")
var var1 = row.fieldID;
var var2 = row.fieldStatus;
var url = '@Url.Action("ModifyObject", "ControllerName")' + '?id=' + var1 + '&status=' + var2;
win.location = url;
}
您的控制器名是
ControllerController
?不是,@ibubi是名称这只是一个示例,但我刚刚编辑了它。您为什么不在新选项卡中打开@Url.Action(“ModifyObject”,“ControllerName”)
?ajax在这里没有增加任何好处,只是让它变得更复杂。我如何从js@Liam做到这一点?你的控制器名是不是ControllerController
?不是,@ibubi只是一个示例,但我只是编辑了它。你为什么不在新选项卡中打开@Url.Action(“ModifyObject”,“ControllerName”)
?ajax在这里没有增加任何好处,只是让它变得更加复杂,我如何从js@Liam做到这一点?我可以肯定地使用它。如果这不是最好的方法,你会怎么做?更新了答案如果我不需要从DOM传递到控制器的两个参数,那将是完美的,这就是在jsIt中进行调用的原因很简单,我忘了添加这一点,现在它已更新感谢@ibubi的帮助,但不知道如何在客户端传递参数。。。请参阅JSFIDLE(伪代码)->我肯定可以使用它。如果这不是最好的方法,你会怎么做?更新了答案如果我不需要从DOM传递到控制器的两个参数,那将是完美的,这就是在jsIt中进行调用的原因很简单,我忘了添加这一点,现在它已更新感谢@ibubi的帮助,但不知道如何在客户端传递参数。。。请参阅JSFIDLE(伪代码)->