2013-02-11 16 views
6

W aplikacji ASP.NET MVC mam dwa przyciski opcji. W zależności od wartości logicznej w modelu, Jak włączyć lub wyłączyć przyciski opcji? (Wartości przyciski radiowe są również częścią modelu)ASP.NET MVC wyłącz przyciski opcji Razor Składnia

Moi przyciski radiowe aktualnie wyglądać tak -

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

W modelu, mam właściwość o nazwie model.Alive. Jeśli model.Alive jest true Chcę umożliwić przyciski radiowe, else if model.Alive jest false chcę wyłączyć przycisków radiowych. Dzięki!

+0

Ustaw, aby css włączyć lub wyłączyć pokazać przyciski radiowe. Nie można również renderować przycisków radiowych. –

+0

Czy jest to standardowy sposób "Razor/ASP.NET/MVC"? –

+0

'if (Model.Alive) {włączono setcss lub @ Html.RadioButonFor // Wyświetl przyciski radiowe}' Po prostu sprawdź stan modelu, czy true set properties lub nie stwórz przycisków radiowych w ogóle –

Odpowiedz

22

Można by przekazać wartości bezpośrednio jako htmlAttributes tak:

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

Jeśli trzeba sprawdzić model.Alive następnie można zrobić coś takiego:

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

nadzieję, że pomoże

+0

Świetna odpowiedź! Dzięki amhed! –

0

Lub zapewnić przeciążenie dla 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

Moja odpowiedź będzie taka sama jak ahmed's. Jedynym problemem jest to, że właściwość WantIt nie zostanie wysłana po przesłaniu, ponieważ jest ignorowana z powodu wyłączenia atrybutu html. Rozwiązaniem jest dodanie HiddenFor nad RadioButtonFors jak ten:

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

ten sposób wszystkie wartości są renderowane i masz logiczną ponownie złożyć.

Powiązane problemy