2012-05-01 11 views
7

Per una vista, devo generare una casella di controllo.Come avere un controllo condizionale, disabilitato, ... con l'helper html?

Ho una collezione di oggetti:

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

e nella vista, sto iterazione su questo

@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) 
} 

Ora vedo che posso fare un "se", in cui creo una diversa matrice HtmlAttribute, a seconda della struttura, ma c'è un modo per creare un solo array

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

ho provato per mettere false, o alcune altre cose, niente ha funzionato.

risposta

8

Non si può evitare il if:

Il problema è con la natura particolare dell'attributo disabled perché non v'è alcun valore "speciale" che renderebbe il lavoro del campione, because:

"disabled" è solo il valore possibile per questo attributo. Se l'ingresso deve essere abilitato, omettere semplicemente l'attributo interamente.

Quindi è necessario omettere l'attributo per abilitare il controllo ma tutti gli helper HTML serializzeranno tutte le proprietà degli oggetti anonimi passati come gli attributi html. E non c'è modo di aggiungere condizionatamente delle proprietà a tipi anonimi.

Tuttavia se si dispone di più attributi comuni per il caso di attivazione/disattivazione e non si desidera creare due tipi di anonymoues, è possibile inserire gli attributi in un dizionario con l'attributo opzionale disabled e utilizzare il dizionario come 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

È lo stesso con l'attributo readonly? – J4N

+0

@JAN 'readonly' si comporta anche come' disabled'. Quindi "readonly" è l'unico valore possibile per 'readonly' e devi omettere l'attributo se vuoi avere" radonly = false ". Quindi è lo stesso. – nemesv

Problemi correlati