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