Передача сложного объекта из window.open в MVC Controller - PullRequest
0 голосов
/ 06 января 2020

Я работаю над javascript функциональностью передачи сложных данных из window.open () в MVC Параметр метода действия контроллера. Я смог добиться этого, создав строку запроса и извлекая ее из [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();
}

Может ли кто-нибудь помочь мне с этой проблемой

Ответы [ 2 ]

1 голос
/ 06 января 2020

Хорошо, у вас есть несколько вариантов здесь. Вы можете либо сгенерировать строку запроса, а затем отправить ее на 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. Specifi c для вашего случая:

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

Если вы хотите использовать URL.Action с Javascript параметрами:

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

Обратите внимание, что вам придется вызывать это в функции javascript.

0 голосов
/ 06 января 2020

При доступе к /Download/ExportToExcel

необходимо указать значение параметра employeeModel в виде тела json. Проблема в том, что для передачи * необходимо использовать метод ExportToExcel с действием POST или PU SH. 1012 * значение параметра в теле запроса.

Пожалуйста, проверьте этот ответ для деталей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...