none
Não consigo fazer o download de um arquivo por ActionLink mvc5 RRS feed

  • 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;
            }
        }


    segunda-feira, 9 de novembro de 2015 15:59

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
    segunda-feira, 9 de novembro de 2015 15:59