none
Como paso un argumento para fileName usando Angulars JS en el siguiente codigo? RRS feed

  • Pregunta

  • El código es:

    @Html.ActionLink("Descargar", "Download", "Documentos", new { fileName = "??????????'" },null)

    Si pongo vm.nombre no me funciona.

    De forma estática si me funciona, es decir si escribo directamente el nombre del documento, si realiza mi acción correctamente. Ej : filename = "documento3988220.pdf", entonces el documento se descarga bien. Pero no logro hacerlo como parámetro para que haga acciones dinámicas que es de lo que se trata y me descargue el documento seleccionado que es la acción que realiza. Tengo incluso el nombre disponible después de sacarlo de la bb.dd y asignado a una variable angular pero no lo procesa. 


    lunes, 4 de julio de 2016 15:42

Todas las respuestas

  • Te puedo explicar por qué no funciona, a ver si así se te ocurre alguna manera de conseguir lo que quieres:

    Lo que pones detrás del @Html.ActionLink es código C# que se ejecuta en el lado servidor. Después de ejecutarlo, el resultado es un <a href...> que se envía al navegador. Por lo tanto, no puedes hacer intervenir una variable de javascript, dado que esa variable no es visible desde el lado servidor, y en consecuencia el C# no puede operar sobre ella.

    Un posible truco es el de poner un nombre fijo, tal como "xxxx". Eso generará en el html un hiperenlace del tipo <a href="loquesea/xxxx">. Y entonces puedes usar algo de javascript para buscar el fragmento "xxxx" en el href y sustituirlo por el nombre real que tienes en una variable en el lado cliente.

    martes, 5 de julio de 2016 5:28
  • hola

    porque usas un ActionLink con angular ?

    el vm.nombre lo estas resolviendo del lado del cliente, mientras que el ActionLink genera el "link" desde el servidor cuando renderiza la view

    puedes definir el link usando el ActionLink, pero sin especificar el nombre, el cual deberias asignarlo desde codigo cliente, o sea deberas poner codigo javascript o jquery que atrape el click del link y a este le agregue el vm.nombre, para recien ali ejecutar la descarga

    el gtran problema es que quieres unir un link generado en el servidor con un nombre de archivo que lo define angular en el cliente

    o sino la otra es que te olvides de todo esto y uses alguna libreria de download que uses ajax, entonces tendrias todo en el cliente

    jQuery File Download Plugin for Ajax

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 5 de julio de 2016 6:01
  • Hola Alberto, tus comentarios me han servido!

    Al final he podido resolverlo y he podido pasar el parámetro

    En mi HTML:

    <tbody>
           <tr ng-repeat="d in vm.documentos"  ng-click="vm.seleccionaDocumento(d)">                     
                            <td class="text-center">
                                @{
                                    var url = Url.Action("Download", "Documentos", new { fileName = "{{fileName=d.ruta}}"                                  });
                                    url = HttpUtility.UrlDecode(url);
                                }
                                <a data-ng-href="@url">Descargar</a>                           
                            </td>                       
                        </tr>

    </tbody>

    La función vm.seleccionaDocumento de Angulars me devuelve el doc de la bb.dd y luego paso el nombre como parámetro a través del item d.

    En el servidor tengo el método Download (un Action  Result) en C# que me hace la descarga :).

    Éste recibe la ruta completa. Por fin!!!


    martes, 5 de julio de 2016 10:19
  • Hola Leandro, al final lo he conseguido. Gracias por tus comentarios.

    En mi HTML:

    <tbody>
           <tr ng-repeat="d in vm.documentos"  ng-click="vm.seleccionaDocumento(d)">                     
                            <td class="text-center">
                                @{
                                    var url = Url.Action("Download", "Documentos", new { fileName = "{{fileName=d.ruta}}"                                  });
                                    url = HttpUtility.UrlDecode(url);
                                }
                                <a data-ng-href="@url">Descargar</a>                           
                            </td>                       
                        </tr>

    </tbody>

    La función vm.seleccionaDocumento de Angulars me devuelve el doc de la bb.dd y luego paso el nombre como parámetro a través del item d.

    En el servidor tengo el método Download (un Action  Result) en C# que me hace la descarga :).

    martes, 5 de julio de 2016 10:21
  • Hola Alberto, tus comentarios me han servido!

    Al final he podido resolverlo y he podido pasar el parámetro

    En mi HTML:

    <tbody>
           <tr ng-repeat="d in vm.documentos"  ng-click="vm.seleccionaDocumento(d)">                     
                            <td class="text-center">
                                @{
                                    var url = Url.Action("Download", "Documentos", new { fileName = "{{fileName=d.ruta}}"                                  });
                                    url = HttpUtility.UrlDecode(url);
                                }
                                <a data-ng-href="@url">Descargar</a>                           
                            </td>                       
                        </tr>

    </tbody>

    La función vm.seleccionaDocumento de Angulars me devuelve el doc de la bb.dd y luego paso el nombre como parámetro a través del item d.

    En el servidor tengo el método Download (un Action  Result) en C# que me hace la descarga :).

    Éste recibe la ruta completa. Por fin!!!

    martes, 5 de julio de 2016 10:29