簡體   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