none
Habilitar o deshabilitar un botón, si un campo viene nulo RRS feed

  • Pregunta

  • Mi problema es el siguiente, en mi clase Facturacion tengo un campo llamado archivo, en este campo puedo subir si deseo una factura en formato .pdf, el campo no es obligatorio. en la lista de facturas tengo un botón para ver la factura pdf en el mismo navegador, por medio de target. lo que deseo es que si en esa factura no se subió ningun archivo pdf no se muestre, o que por lo menos al darle clic no se vaya a una pantalla de error. 
    viernes, 25 de noviembre de 2016 18:48

Todas las respuestas

  • Ponle un condicional en el sitio donde muestras el botón. No has dicho nada de las herramientas que usas, pero suponiendo que sea una vista en Razor puedes poner algo así:

    @if (Model.Archivo != null)

    {

        <input type="button" etc (pon aquí el código de tu botón) />

    }

    viernes, 25 de noviembre de 2016 19:16
  • Hola David Restrepo Zuluaga,

    Pero solo tendrías que validar si el campo viene nulo (campo == null {}). Si el valor es nulo podrías agregar un atributo 'disabled' al botón, para que se muestre inhabilitado, o asignarle una clase 'especial' para que no se muestre en el DOM al compilar el Html.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 25 de noviembre de 2016 19:19
  • así tengo construido mi botón en la vista. 

     @Html.ActionLink(" > Ver", "Download", new { fileName = item.Archivo }, new { target = "_blank", @class = "btn btn-danger btn-xs" })

    viernes, 25 de noviembre de 2016 20:19
  • así tengo construido mi botón en la vista. 

     @Html.ActionLink(" > Ver", "Download", new { fileName = item.Archivo }, new { target = "_blank", @class = "btn btn-danger btn-xs" })

    Puedes ponerle un condicional en el class:

     @Html.ActionLink(" > Ver", "Download", new { fileName = item.Archivo }, new { target = "_blank", @class = item.Archivo != null ? "btn btn-danger btn-xs" : "otraClase" })

    y evidentemente declarar .otraClase en el CSS de manera que cambie el estilo del botón como lo quieras.

    O bien, si lo quieres suprimir por completo, ponlo dentro de un @if tal como sugería la primera respuesta.

    viernes, 25 de noviembre de 2016 20:58
  • hola, que pena la molestía, ya estoy un poco más contextualizado pero aún así, el código propuesto no me funciona. 

     @if (item.Archivo != null) { 
                 @Html.ActionLink(" > Ver", "Download", new { fileName = item.Archivo }, new { target = "_blank", @class =  "btn btn-danger btn-xs"})
                 }

    espero tengas tiempo de solucionar mi problema 

    Nota: tengo dudas si es item.Archivo , pero al colocar Model.(algo) me genera error. 

    viernes, 25 de noviembre de 2016 21:15
  • Hola David Restrepo Zuluaga,

    Ya que usas las clases de bootstrap 'btn btn-danger', puedes asignar un button disabled para impedir que se pueda redireccionar.

    Algo como :

    @if (item.Archivo == null)
    {
        <button class="btn btn-danger btn-xs" disabled>&gt; Ver</button>
    }
    else
    {
        @Html.ActionLink(" > Ver", "Download", new { fileName = item.Archivo },
                                    new { target = "_blank", @class = "btn btn-danger btn-xs" })
    }

    Ya que si le pones un disabled a un link igualmente redireccionaría.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 25 de noviembre de 2016 22:21
  • ya hice lo que me recomiendas, efectivamente, deshabilita el botón, pero no difiere si lleva o no un archivo nulo, los deshabilita todos sin expceción.
    viernes, 25 de noviembre de 2016 22:44
  • ya hice lo que me recomiendas, efectivamente, deshabilita el botón, pero no difiere si lleva o no un archivo nulo, los deshabilita todos sin expceción.

    Hola David Restrepo Zuluaga,

    Pero si el item.Archivo es nulo te crea un botón disabled para no poder dar click, ya que al ser nulo no tendrías sentido crear una url 'vacía' usando el ActionLink, y si tiene data (no es nulo), ahí entra al else y crea el Html.ActionLink con el nombre del item.Archivo.

    No es lo que pretendías hacer ?

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 25 de noviembre de 2016 23:22
  • [...] no me funciona. 

     @if (item.Archivo != null) { 
                 @Html.ActionLink(" > Ver", "Download", new { fileName = item.Archivo }, new { target = "_blank", @class =  "btn btn-danger btn-xs"})
                 }

    Te sobra una @. Este símbolo se usa para conmutar de html a C#. Dado que ya está puesta en el "if" y por tanto ya estás en "modo C#", no debes poner una segund @ en el @Html, porque en C# no es una sintaxis correcta preceder de @ el nombre del objeto Html.

    En cuanto a la otra duda, el Model.algo se usa cuando accedes directamente al modelo. Si el código ya lo estás metiendo dentro de un bucle que hace algo así como foreach(var item in Model.algo), entonces dentro del bucle lo que querrás usar es la variable item para que te devuelva cada uno de los datos del Model que ya estás recorriendo mediante el bucle.

    sábado, 26 de noviembre de 2016 9:35
  • Efectivamente, el problema que me surge es que sea nulo o no, me aparece deshabilitado 

    de antemano, muchas gracias por tanta colaboración, seguiré buscando que puede ser el error. 

    sábado, 26 de noviembre de 2016 13:19
  • el problema que me surge es que sea nulo o no, me aparece deshabilitado. 

    Ejecútalo con el debugger y para la ejecución en esa línea y examina la variable, no vaya a ser que donde crees que es nulo en realidad te esté llegando otra cosa, por ejemplo un string vacío, con lo que nunca es true la comparación con null.
    sábado, 26 de noviembre de 2016 13:56