Cómo deshabilitar un botón de forma más elegante

3 minutos de lectura

Avatar de usuario de AnonyMouse
AnónimoRatón

Tengo en una de mis vistas el siguiente código de afeitar:

@if (item.PMApproved != true) {
                    <input type="button" class="btnresetinvoice button" value="Reset" data-invoiceid="@item.InvoiceId" />
                }
                else {
                    <input type="button" class="btnresetinvoice button" value="Reset" data-invoiceid="@item.InvoiceId" disabled="disabled" />
                }

Bastante duro. Básicamente, quiero deshabilitar el botón bajo ciertas condiciones, ya que podrías resolverlo a partir del código. ¿Cuál sería una forma más deseable de hacer esto?

  • ¿Qué idioma es este (además de HTML)?

    – Brendan largo

    15/04/2012 a las 21:33

  • ¿Qué podría ser más deseable? ¿Qué fallas ves en tu solución?

    – Tomás

    15/04/2012 a las 21:34

  • Es el motor de plantilla de afeitar que permite la creación de secuencias de comandos C# a través de @ prefijo.

    – Yogu

    15/04/2012 a las 21:40


Avatar de usuario de Simone S.
simone s.

Prueba esto:

<button type="submit" disabled="@(!item.PMApproved)"></button>

  • Única solución en esta página que funciona para mí en .Net Core 2.1

    – Alex

    24 de junio de 2018 a las 9:06


Avatar de usuario de Brendan Long
Brendan largo

No sé qué idioma estás usando, pero es posible que puedas mover tu if declaración más cercana a la diferencia real entre las dos líneas:

<input type="button" class="btnresetinvoice button" value="Reset"
       data-invoiceid="@item.InvoiceId"
       @{ if(item.PMApproved != true) { 
             @:disabled="disabled" 
        } }
/>

  • No parece estar aceptando la parte deshabilitada en la declaración if. Dice que el nombre ‘discapacitado’ no existe en el contexto actual

    – Ratón Anónimo

    15/04/2012 a las 21:40

  • @AnonyMouse – Corregido ahora gracias a Yogu. En el futuro, debe incluir el idioma en su pregunta para que las personas no tengan que adivinar la sintaxis.

    – Brendan largo

    15/04/2012 a las 21:46

  • Estoy tratando de usar esto en mi código pero el @: parece estar escondiendo la } en mi código que causa un error de sintaxis, ¿alguna idea al respecto?

    – Mykroft

    20 de junio de 2013 a las 14:48

  • @Mykroft ¿Tal vez intente poner el texto sin formato en su propia línea? O simplemente el <% ... %> sintaxis en su lugar?

    – Brendan largo

    20 de junio de 2013 a las 15:49

  • terminé poniendo this.write en cambio. No es gran cosa, pero es posible que desee volver a verificar el código en su respuesta y asegurarse de que funcione con el /> al final ahí.

    – Mykroft

    20 de junio de 2013 a las 17:30

Avatar de usuario de David Grant
david subvención

Una solución centrada en el marcado con la ayuda de un nuevo método de extensión:

public static class HtmlExtensions
{
   public static HtmlString DisabledIf(this HtmlHelper html, bool condition)
   {
      return new HtmlString(condition ? "disabled=\"disabled\"" : "");
   }
}

En sus puntos de vista, reutilice el wazoo:

<button type="reset" @Html.DisabledIf(someCondition)>Clear Fields</button>

Bien reutilizable, y el marcado renderizado es muy limpio con respecto a los espacios en blanco:

<button type="reset" disabled="disabled">Clear Fields</button>

  • Gran solución que realmente sigue el espíritu del marco. Asegúrese de colocar el método en un espacio de nombres que MVC pueda ver.

    – Daniel

    9 de febrero de 2018 a las 0:07

Avatar de usuario de Andrii
Andrii

Usando la maquinilla de afeitar asp.net mvc5:

@if(condition)
{
   <button data-toggle="collapse" data-target="#content">Details</button>
}
else
{
   <button disabled>Details</button>
}

Evita intentar habilitar el botón desde DevTools, porque la maquinilla de afeitar no está visible para DevTools

<input type="button" value="Reset" @{@((!item.PMApproved) ? null : new { disabled = "disabled" })}; />

No es necesario ese código inflado, solo mantenlo simple 🙂

Avatar de usuario de Darin Dimitrov
darin dimitrov

Un ayudante podría ayudar:

public static class HtmlExtensions
{
    public static IHtmlString ApproveButton(this HtmlHelper htmlHelper, MyViewModel item)
    {
        var button = new TagBuilder("input");
        button.Attributes["type"] = "button";
        button.Attributes["value"] = "Reset";
        button.AddCssClass("btnresetinvoice");
        button.AddCssClass("button");
        button.Attributes["data-invoiceid"] = item.InvoiceId.ToString();
        if (item.PMApproved)
        {
            button.Attributes["disabled"] = "disabled";
        }
        return new HtmlString(button.ToString(TagRenderMode.SelfClosing));
    }
}

y luego:

@Html.ApproveButton(item)

Avatar de usuario de Oğuzhan Türk
Oğuzhan Türk

<button @(isEnabled ? null : "disabled")>Butt</button>

¿Ha sido útil esta solución?