繁体   English   中英

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

[英]Pass a complex object from window.open to MVC Controller

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

但我的问题是我想将数据作为模型对象传递。 是否可以在 window.open() 中

下面是我的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.Action("ExportToExcel", "Download");

但我无法通过它们。

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

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

谁能帮我解决这个问题

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

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

等效于使用Url.Action

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)
    }
  });                
});

您的Controller方法如下所示:

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");
}

如果要使用带有 Javascript 参数的URL.Action

'@Url.Action("ExportToExcel", "Download")?EmpName=' + empName + '&EmpId=' + empId '&DeptId=' + deptId;

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

访问/Download/ExportToExcel时,您必须将employeeModel 参数值作为json 正文

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

请检查此答案以获取详细信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM