2012-04-15 17 views
15

tengo en uno de mis puntos de vista el siguiente código de afeitar:Cómo deshabilitar un botón más elegante

@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 desactivar el botón bajo ciertas condiciones, ya que podría trabajar desde el código. ¿Cuál sería una forma más deseable de hacer esto?

+4

Qué lenguaje es esto (además de HTML)? –

+0

¿qué podría ser más deseable? ¿Qué defectos ves en tu solución? – TMS

+0

El lenguaje es C# MVC 3.0 – AnonyMouse

Respuesta

12

No sé qué idioma se está utilizando, pero que podría ser capaz de mover su declaración if más cerca de los diferentes real entre las dos líneas:

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

Parece que no acepta la parte deshabilitada en la instrucción if. Dice que el nombre 'deshabilitado' no existe en el contexto actual – AnonyMouse

+3

Agregue '@:' antes 'disabled' para marcarlo como texto sin formato. – Yogu

+1

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

2

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) 
2

probar este

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

Bien hecho ..... – user2695433

0

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

No hay necesidad de que el código hinchado, si prefieres algo más sencillo :-)

9

Una solución de marcado centrada en 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 su vistas, reutilizar el wazoo:

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

Muy bien reutilizable, y el margen de beneficio prestado es muy limpio, con respecto a los espacios en blanco:

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

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

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