Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当控制器返回时,从javascript在新选项卡中打开视图_Javascript_Jquery_Asp.net Mvc - Fatal编程技术网

当控制器返回时,从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(伪代码)->