2015-09-11 3 views
1

В ситуации, когда вам не нужно передавать параметры ниже пример работает отлично:ASP.NET MVC передает параметры контроллеру, который возвращает файл?

контроллер без параметров:

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

Но что, если Я хочу передать некоторые параметры контроллеру и загрузить файл? В любом случае, чтобы имитировать щелчок на теге a из jquery и передать параметры. Я знаю, что вы не можете получить файл с вызовом 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"); 
    } 

ответ

1

Вы можете сделать это легко с одним из перегрузок @Url.Action, которые имеют routeValues:

<a href="@Url.Action("GetExcelTable", "Home", new { Month = 9, Year = 2015})">Get excel</a> 

Если вы хотите передать их dynamicaly вы должны использовать 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/> 
+0

Месяц и год являются динамическими значениями из раскрывающегося списка, который пользователь указывает им. Я должен получить выбранные значения из выпадающего списка до вызова контроллера. –

+1

, тогда вы должны использовать js. i обновленный ответ –

+0

Это сработало! Благодарю. –

Смежные вопросы