当前位置: 首页 > 知识库问答 >
问题:

将复杂对象从window.open传递给MVC控制器

关志
2023-03-14

我正在开发将复杂数据从window.open()传递到MVC Controller action方法参数的javascript功能。我能够通过构建查询字符串并从控制器中的[FromQuery]检索它们来实现它。

但我的问题是,我想将数据作为模型对象传递。在窗户里可以吗。打开()

下面是我的javascript代码

$("#btnExportToExcelForBatch").on('click',
                function() {
                    var currentBatchId = 0;
                    var empName = $("#empName").val();
                    var empId = $("#empId").val();
                    var deptId = $("#deptId").val();
                    window.open("/Download/ExportToExcel?EmpName="
                        + empName + "&EmpId=" + empId + "&DeptId="
                        + deptId);                 
                });

如您所见,我可以在URL中传递数据,但它似乎是公开的。那么,有没有办法传入var url=@url。动作(“ExportToExcel”,“下载”)

但是我无法通过他们。

是否有可能通过将模型对象发送给MVC控制器来实现。

public async Task<IActionResult> ExportToExcel(EmployeeModel employeeModel)
{
     // SomeCode
     return File();
}

有人能帮我解决这个问题吗

共有2个答案

佴德曜
2023-03-14

访问下载/导出Excel时,必须将employeeModel参数值作为json正文

问题是ExportToExcel方法必须与POST或PUSH操作一起使用才能在请求正文中传递Json参数值。

详情请查看此答案

丁德义
2023-03-14

好的,这里有几个选项。您可以生成查询字符串,然后将其发送到window.open,但在这种情况下,您的参数将公开:

var urlquerstr = BaseUrl + "/Download/ExportToExcel?EmpName="+ empName + "&EmpId=" + empId+ "&DeptId="+ deptId;

等效使用Url。操作

var urlquerstr = @Url.Action("ExportToExcel", "Download", new { EmpName= Model.empName, EmpId= Model.empId, DeptId=Model.deptId })

生成查询字符串后,只需执行以下操作:

window.open(urlquerstr);

或者您正在寻找POST您的参数到您的Controller方法并在此基础上采取适当的操作。您可以使用AJAX执行此操作。具体到您的情况:

$("#btnExportToExcelForBatch").on('click',
   function() {
      var currentBatchId = 0;
      var empName = $("#empName").val();
      var empId = $("#empId").val();
      var deptId = $("#deptId").val();
      //Generate data to be sent to the controller
      var json= { EmpName: empName , EmpId: empId , DeptId: deptId };
$.ajax({
    url: '@Url.Action("ExportToExcel", "Download")',
    type: 'post',
    dataType: "json",
    data: { "json": JSON.stringify(json)},
    success: function (result) {
         alert(result);
         //window.open(result);
    },
    error: function (error) {
         console.log(error)
    }
  });                
});

您的控制器方法如下所示:

using System.Web.Script.Serialization;

[HttpPost]    
public async Task<IActionResult> ExportToExcel(string json)
{
    var serializer = new JavaScriptSerializer();
    dynamic jsondata = serializer.Deserialize(json, typeof(object));

    //Get your variables here from AJAX call
    var EmpName= jsondata["EmpName"];
    var EmpId=jsondata["EmpId"];
    var DeptId=jsondata["DeptId"];

    //Do something with your variables here    

    return Json("File exported successfully");
}
'@Url.Action("ExportToExcel", "Download")?EmpName=' + empName + '&EmpId=' + empId '&DeptId=' + deptId;

请注意,您必须在javascript函数中调用它。

 类似资料:
  • 问题内容: 我正在使用.Net 4,MVC 3和jQuery v1.5做一些工作 我有一个JSON对象,它可以根据调用它的页面而改变。我想将对象传递给控制器​​。 我了解如果我创建一个自定义模型,例如 并在我的控制器中使用它,例如 并使用jQuery的.ajax方法传递对象,如下所示: 这工作正常,我的JSON对象已映射到我的C#对象。我想做的是通过一个可能更改的JSON对象。当它更改时,我不需要

  • 问题内容: 我有以下任意JSON对象(字段名称可能会更改)。 -- 我知道我可以像定义具有相同字段名的JSON对象那样定义类,但是我希望控制器接受具有不同字段名的任意JSON对象。 问题答案: 如果您想将自定义JSON对象传递给MVC操作,则可以使用此解决方案,它的工作原理很吸引人。 该解决方案的真正好处是,您不需要为每个参数组合定义一个新类,并且除此之外,您可以轻松地将对象转换为其原始类型。 更

  • 问题内容: 在MVC4中,如何将javascript对象传递给AJAX中的C#控制器?最后,我尝试了一下,但没有成功。 Javascript客户端: C#服务器端方法: 我的参数始终为null。我试图更改contentType,但仍然无法正常工作。我的错误在哪里?我找到了一些帖子,但没有发现我做错了什么。 非常感谢。 问题答案: 确保javascript和C#模型之间的属性名称匹配。在你的问题,你

  • 问题内容: 我有一个视图,允许用户输入/编辑新窗口小部件的数据。我想将这些数据组成一个json对象,然后通过AJAX将其发送到我的控制器,这样我就可以在服务器上进行验证而无需回发。 我已经完成了所有工作,但是我无法弄清楚如何传递数据,因此我的控制器方法可以接受复杂的Widget类型,而不是每个属性的单个参数。 因此,如果这是我的对象: 我希望我的控制器方法看起来像这样: 目前,我的jQuery如下

  • 我正在尝试将一个对象(或只是ID)传递给我的控制器,我从下拉列表中选择它。有2个类:产品和类别(产品包含一个外键,这是类别的ID)这是我如何将其加载到: 如您所见,我正在将对象类别传递到我的. jsp中。在那里我显示了用户可以选择的所有类别。 该值应该传递给我的控制器,但我不知道如何传递它。

  • 我正在javascript上对消息进行加密和解密,并希望将结果消息发送到Spring控制器mvc。 因此,令牌应该保存来自javascript的值。我没有使用jquery。如何将javascript中的值传递给Spring mvc控制器。 我想在java控制器类中使用这个变量(即encryptedFinally)。