2013-02-11 13 views
6

In einer ASP.NET MVC-Anwendung habe ich zwei Optionsfelder. Abhängig von einem booleschen Wert im Modell, wie aktiviere oder deaktiviere ich die Optionsfelder? (Die Werte der Radioknöpfe sind ebenfalls Teil des Modells)ASP.NET MVC deaktivieren Optionsfelder mit Razor-Syntax

Meine Radiobuttons zur Zeit wie folgt aussehen -

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

Im Modell Ich habe eine Eigenschaft namens model.Alive. Wenn model.Alivetrue ist möchte ich die Radio-Buttons aktivieren, sonst, wenn model.Alivefalse ist, möchte ich deaktivieren die Radio-Buttons. Danke!

+0

Stellen Sie die CSS so ein, dass sie die Optionsschaltflächen entweder aktivieren oder deaktivieren. Sie könnten die Optionsfelder auch nicht rendern. –

+0

Gibt es einen Standard "Razor/ASP.NET/MVC" Weg dies zu tun? –

+0

'if (Model.Alive) {setcss aktiviert oder @ Html.RadioButonFor // Radioknöpfe anzeigen}' Überprüfen Sie einfach den Modellzustand, wenn True Set-Eigenschaften oder die Radio-Buttons überhaupt nicht erstellen –

Antwort

22

Sie können die Werte direkt als Htmlattributes wie so passieren:

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

Wenn Sie model.Alive überprüfen müssen, dann können Sie etwas tun:

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

Hoffnung, die

hilft
+0

Große Antwort! Danke schön! –

0

Oder bieten Sie eine Überladung für 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

Meine Antwort wäre die gleiche wie Ahmed. Das einzige Problem ist, dass die WantIt-Eigenschaft beim Senden nicht gesendet wird, da sie aufgrund des deaktivierten HTML-Attributs ignoriert wird. Die Lösung ist eine HiddenFor über den RadioButtonFors wie folgt hinzuzufügen:

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

Auf diese Weise werden alle Werte wiedergegeben und Sie den Booleschen wieder auf einreichen.