[英]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.