2012-05-01 14 views
7

Para ver, tengo que generar algunas casillas de verificación.¿Cómo tener un marcado condicional, desactivado, ... con el helper html?

tengo una colección de artículos:

public class ItemSelection 
    { 
     public int Id { get; set; } 
     public String Name { get; set; } 
     public Boolean IsSelected { get; set; } 
     public Boolean IsActive { get; set; } 
    } 

y en la vista, estoy iterando sobre este

@foreach(ItemSelection item in Model.Items){ 
    Html.CheckBoxFor(m=>item.IsSelected)//HERE I WOULD LIKE TO HAVE DISABLED properties if I've a IsActive=falsel 
    Html.HiddenFor(m=>item.Id) 
} 

Ahora veo que puedo hacer un "si" en el cual puedo crear una matriz HtmlAttribute diferente, en función de esta propiedad, pero ¿hay una manera de crear un único conjunto

new {disabled=item.IsActive?"ONE_SPECIAL_VALUE_HERE":"disabled"} 

probé poner false, u otras cosas, nada funcionó.

Respuesta

8

No se puede evitar la if:

El problema es con la naturaleza especial del atributo disabled porque no hay valor "especial" que haría su trabajo de la muestra, because:

"deshabilitado" solo es posible valor para este atributo. Si la entrada debe estar habilitada, simplemente omita el atributo por completo.

Por lo tanto, debe omitir el atributo para habilitar el control pero todos los ayudantes de HTML serializarán todas las propiedades de los objetos anónimos pasados ​​como htmlattributes. Y no hay forma de agregar propiedades condicionalmente a tipos anónimos.

Sin embargo, si tiene múltiples atributos comunes para el caso de habilitar/deshabilitar, y no desea crear dos tipos anonymoues, puede poner los atributos en un diccionario con el atributo opcional disabled y usar el diccionario como htmlAttributes :

var checkboxHtmlAttributes = new Dictionary<string, object> 
           {{"attibute1", "value1"}, 
           {"attribute2", "value2"}}; 
if (!item.IsActive) 
{ 
    checkboxHtmlAttributes.Add("disabled", "disabled"); 
} 
@Html.CheckBoxFor(m=>item.IsSelected, checkboxHtmlAttributes) 
+0

¿Esto es lo mismo con el atributo readonly? – J4N

+0

@JAN 'readonly' también se comporta como' disabled'. Entonces "readonly" es el único valor posible para 'readonly' y necesitas omitir el atributo si quieres tener" radonly = false ". Entonces es lo mismo – nemesv

Cuestiones relacionadas