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