Checkbox Disabled Attribute In ASP.NET MVC


Answer :

It is not easy to achieve this with an if condition inside the helper method because all the below markups will render a disabled chechbox.

<input type="checkbox" disabled> <input type="checkbox" disabled="disabled"> <input type="checkbox" disabled="false"> <input type="checkbox" disabled="no"> <input type="checkbox" disabled="enabled"> 

This should work in the razor. Simple If condition and rendering what you want.

@if(item.Selected) {    @Html.CheckBoxFor(modelItem => item.Selected) } else {     @Html.CheckBoxFor(modelItem => item.Selected, new { @disabled = "disabled"}) } 

You may consider writing a custom html helper which renders the proper markup for this.


This won't work because <input disabled="anything" /> will result in a disabled control. You need to only have a @disabled property when it should be disabled.

Try something like this:

@Html.CheckBoxFor(modelItem => item.Selected, item.Selectable ?  (object)new {} :  (object)new { @disabled = "disabled" }) 

Note that you might need to cast to (object)


The problem is when you have to add more than 1 HTML attribute. That's a mess:

@if(item.Selected) {    @Html.CheckBoxFor(modelItem => item.Selected, new { @data_foo = "bar"}) } else {     @Html.CheckBoxFor(modelItem => item.Selected, new { @data_foo = "bar", @disabled = "disabled"}) } 

What I do to solve this is to use a IDictionary<string, object> that is previously loaded:

var htmlAttributes = new Dictionary<string, object>{     {"data-foo", "bar"} }; if(!item.Selected) {     htmlAttributes.Add("@disabled", "disabled"); } 

And then I create the checkbox component only once:

@Html.CheckBoxFor(modelItem => item.Selected, htmlAttributes) 

Comments

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?