2013-02-11 20 views
6

In un'applicazione ASP.NET MVC, ho due pulsanti di opzione. A seconda del valore booleano nel modello, come abilitare o disabilitare i pulsanti di opzione? (I valori dei pulsanti di opzione sono anche parte del modello)ASP.NET MVC disabilita i pulsanti di opzione con sintassi Razor

I pulsanti di opzione attualmente simile a questa -

  @Html.RadioButtonFor(m => m.WantIt, "false") 
      @Html.RadioButtonFor(m => m.WantIt, "true") 

Nel modello, ho una proprietà chiamata model.Alive. Se model.Alive è true voglio consentire i pulsanti di opzione, altrimenti se model.Alive è false, voglio disabilitare i pulsanti di opzione. Grazie!

+0

impostare il css per abilitare disabilitare o nascondere mostrare i pulsanti di opzione. Potresti anche non eseguire il rendering dei pulsanti di opzione. –

+0

Esiste un modo standard "Razor/ASP.NET/MVC" per farlo? –

+0

'if (Model.Alive) {setcss abilitato o @ Html.RadioButonFor // Visualizza i pulsanti di opzione}' Basta controllare lo stato del modello se le proprietà del set vero o non creare i pulsanti di opzione per tutto –

risposta

22

Si potrebbe passare i valori direttamente come htmlAttributes in questo modo:

@Html.RadioButtonFor(m => m.WantIt, "false", new {disabled = "disabled"}) 
@Html.RadioButtonFor(m => m.WantIt, "true", new {disabled = "disabled"}) 

Se è necessario verificare la presenza di model.Alive allora si potrebbe fare qualcosa di simile:

@{ 
    var htmlAttributes = new Dictionary<string, object>(); 
    if (Model.Alive) 
    { 
     htmlAttributes.Add("disabled", "disabled"); 
    } 
} 

Test 1 @Html.RadioButton("Name", "value", false, htmlAttributes) 
Test 2 @Html.RadioButton("Name", "value2", false, htmlAttributes) 

Speranza che aiuta

+0

Ottima risposta! Grazie amhed! –

0

Oppure fornire un sovraccarico per RadioButtonFor?

public static MvcHtmlString RadioButtonFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object value, bool isDisabled, object htmlAttributes) 
    { 
     var linkAttributes = System.Web.Mvc.HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes); 
     Dictionary<string, object> htmlAttributesDictionary = new Dictionary<string, object>(); 
     foreach (var a in linkAttributes) 
     { 
      if (a.Key.ToLower() != "disabled") 
      { 
       htmlAttributesDictionary.Add(a.Key, a.Value); 
      } 

     } 

     if (isDisabled) 
     { 
      htmlAttributesDictionary.Add("disabled", "disabled"); 
     } 

     return InputExtensions.RadioButtonFor<TModel, TProperty>(htmlHelper, expression, value, htmlAttributesDictionary); 
    } 
1

La mia risposta sarebbe la stessa di ahmed. L'unico problema è che la proprietà WantIt non verrà inviata su submit poiché viene ignorata a causa dell'attributo html disabilitato. La soluzione è quella di aggiungere un HiddenFor sopra le RadioButtonFors come questo:

@Html.HiddenFor(m => m.WantIt) 
@Html.RadioButtonFor(m => m.WantIt, "false", new {disabled = "disabled"}) 
@Html.RadioButtonFor(m => m.WantIt, "true", new {disabled = "disabled"}) 

In questo modo tutti i valori sono resi e si ottiene il booleano nuovamente presentare.