ASP.NET MVC 将参数传递给 returns 文件的控制器?
ASP.NET MVC pass parameters to controller that returns File?
在您不需要传递任何参数的情况下,下面的示例工作正常:
无参数控制器:
[Authorize]
public ActionResult GetExcelTable()
{
XlWorkBook table = new XlWorkBook();
MemoryStream stream = new MemoryStream();
table.SaveAs(stream);
return File(stream, MyLib.MIMETypes.GetFileMIMEType(".xlsx"), "Kr-ti-" + Year + "-" + Month.ToString() + "_" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + ".xlsx");
}
客户:
<a href="@Url.Action("GetExcelTable", "Home")">Get excel</a>
但是如果我想传递一些参数给控制器并下载文件怎么办?有没有模拟从 jquery 对 a
标签的点击并传递参数。我知道您无法通过 jquery ajax 调用获取文件。
Month
和 Year
参数是用户在下拉列表中指定的客户端动态值。我必须在调用控制器之前读取这些值并将它们传递给控制器。
带参数的控制器:
[Authorize]
public ActionResult GetExcelTable(int Month, int Year)
{
XlWorkBook table = new XlWorkBook(Month, Year);
MemoryStream stream = new MemoryStream();
table.SaveAs(stream);
return File(stream, MyLib.MIMETypes.GetFileMIMEType(".xlsx"), "Kr-ti-" + Year + "-" + Month.ToString() + "_" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + ".xlsx");
}
您可以使用具有 routeValues
:
的重载之一 @Url.Action
轻松完成此操作
<a href="@Url.Action("GetExcelTable", "Home", new { Month = 9, Year = 2015})">Get excel</a>
如果你想动态传递它们,你应该使用 Js,Jquery 它将是:
<a id="get-excel">Get excel</a>
<script>
$(document).ready(function () {
$(a#get-excel).click(function(){
var month = $(select#monthdd).val();
var year = $(select#yeardd).val();
window.location.href = '@Url.Action("GetExcelTable", "Home")?Month='+ month +'&Year=' + year;
});
});
<script/>
在您不需要传递任何参数的情况下,下面的示例工作正常:
无参数控制器:
[Authorize]
public ActionResult GetExcelTable()
{
XlWorkBook table = new XlWorkBook();
MemoryStream stream = new MemoryStream();
table.SaveAs(stream);
return File(stream, MyLib.MIMETypes.GetFileMIMEType(".xlsx"), "Kr-ti-" + Year + "-" + Month.ToString() + "_" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + ".xlsx");
}
客户:
<a href="@Url.Action("GetExcelTable", "Home")">Get excel</a>
但是如果我想传递一些参数给控制器并下载文件怎么办?有没有模拟从 jquery 对 a
标签的点击并传递参数。我知道您无法通过 jquery ajax 调用获取文件。
Month
和 Year
参数是用户在下拉列表中指定的客户端动态值。我必须在调用控制器之前读取这些值并将它们传递给控制器。
带参数的控制器:
[Authorize]
public ActionResult GetExcelTable(int Month, int Year)
{
XlWorkBook table = new XlWorkBook(Month, Year);
MemoryStream stream = new MemoryStream();
table.SaveAs(stream);
return File(stream, MyLib.MIMETypes.GetFileMIMEType(".xlsx"), "Kr-ti-" + Year + "-" + Month.ToString() + "_" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + ".xlsx");
}
您可以使用具有 routeValues
:
@Url.Action
轻松完成此操作
<a href="@Url.Action("GetExcelTable", "Home", new { Month = 9, Year = 2015})">Get excel</a>
如果你想动态传递它们,你应该使用 Js,Jquery 它将是:
<a id="get-excel">Get excel</a>
<script>
$(document).ready(function () {
$(a#get-excel).click(function(){
var month = $(select#monthdd).val();
var year = $(select#yeardd).val();
window.location.href = '@Url.Action("GetExcelTable", "Home")?Month='+ month +'&Year=' + year;
});
});
<script/>