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 调用获取文件。 MonthYear 参数是用户在下拉列表中指定的客户端动态值。我必须在调用控制器之前读取这些值并将它们传递给控制器​​。

带参数的控制器:

    [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/>