Inquiridor
Não consigo fazer o download de um arquivo por ActionLink mvc5

Pergunta
-
Sei que o erro está na forma como eu estou interpretando a rotina. Tenho uma rotina para fazer download de uma arquivo anexado em uma table. Esse arquivo foi gerado pela minha aplicação(binário) e preciso agora gravar esse binário em um dir qualquer, ou seja, em minha table/grid há vários arquivos e preciso gravar o arquivo de ID tal. Bem, tentei várias formas e sei que um detalhe não estou conseguindo. Veja o que já fiz: CONTROLLER:
public FileResult Download(int id) { int _arquivoId = id; var arquivos = oModelFiles.GetFileReport(id); string nomeArquivo = (from arquivo in arquivos where arquivo.ID_SOLIC_RELATORIO == _arquivoId select arquivo.BL_RELATORIO).First().ToString();//iSSO AQUI É TENTATIVA. string contentType = "application/pdf"; return File(nomeArquivo, contentType, "report.pdf"); }
Minha classe para pegar o arquivo
public class ModelFiles { public List<POC_SOLIC_RELATORIO> GetFileReport(int _Id_Solic_Relat) { List<POC_SOLIC_RELATORIO> lstFiles = new List<POC_SOLIC_RELATORIO>(); //DirectoryInfo dirInfo = new DirectoryInfo(HostingEnvironment.MapPath("~/Arquivos")); DirectoryInfo dirInfo = new DirectoryInfo("C:/Relatemp/"); string arquivoCaminho = string.Empty; int i = 0; foreach (var item in dirInfo.GetFiles()) { lstFiles.Add(new POC_SOLIC_RELATORIO() { ID_RELATORIO = _Id_Solic_Relat, //arquivoID = i + 1, //arquivoNome = item.Name, //FilePath = dirInfo.FullName + @"\" + item.Name }); i = i + 1; } return lstFiles; } }
Todas as Respostas
-
Complementando aí está a minha view onde tem o botão Download e o erro
<table class="table"> <tr> <th> @*@Html.DisplayNameFor(model => model.POC_RELATORIO.NM_RELATORIO)*@ @Html.DisplayName("Nome do Relatório") </th> <th> @Html.DisplayName("Relatório") </th> <th> @*@Html.DisplayNameFor(model => model.ID_USUARIO)*@ @Html.DisplayName("Usuário") </th> <th> @*@Html.DisplayNameFor(model => model.DT_SOLICITACAO)*@ @Html.DisplayName("Data da Solicitação") </th> <th> @*@Html.DisplayNameFor(model => model.DT_AGENDAMENTO)*@ @Html.DisplayName("Data do Agendamento") </th> <th> @*@Html.DisplayNameFor(model => model.DT_GERACAO)*@ @Html.DisplayName("Data da Geração do Relatório") </th> <th> @*@Html.DisplayNameFor(model => model.BL_RELATORIO)*@ @Html.DisplayName("Relatório") </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.POC_RELATORIO.NM_RELATORIO) </td> <td> @Html.DisplayFor(modelItem => item.ID_SOLIC_RELATORIO) </td> <td> @Html.DisplayFor(modelItem => item.ID_USUARIO) </td> <td> @Html.DisplayFor(modelItem => item.DT_SOLICITACAO) </td> <td> @Html.DisplayFor(modelItem => item.DT_AGENDAMENTO) </td> <td> @Html.DisplayFor(modelItem => item.DT_GERACAO) </td> <td> @Html.DisplayFor(modelItem => item.BL_RELATORIO) </td> <td> @Html.ActionLink("Download", "Download", new { item.ID_SOLIC_RELATORIO, item.BL_RELATORIO }) </td> <td> @Html.ActionLink("Open", "", "") </td> @*<td> @Html.ActionLink("Edit", "Edit", new { id=item.ID_SOLIC_RELATORIO }) | @Html.ActionLink("Details", "Details", new { id=item.ID_SOLIC_RELATORIO }) | @Html.ActionLink("Delete", "Delete", new { id=item.ID_SOLIC_RELATORIO }) </td>*@ </tr> } </table>
Erro de Servidor no Aplicativo '/'.
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.FileResult Download(Int32)' in 'Relatorio.Controllers.AppealReportController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Nome do parâmetro: parameters
Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.
Detalhes da Exceção: System.ArgumentException: The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.FileResult Download(Int32)' in 'Relatorio.Controllers.AppealReportController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Nome do parâmetro: parameters
Erro de Origem:
Exceção sem tratamento foi gerada durante a execução da atual solicitação da Web. As informações relacionadas à origem e ao local da exceção podem ser identificadas usando-se o rastreamento de pilha de exceção abaixo.
Rastreamento de Pilha:
- Editado pnet segunda-feira, 9 de novembro de 2015 16:00