nolanofra nolanofra - 2 months ago 54
C# Question

Disabled DropDownList razor mvc

In my razor view, I use a drop down list. I want to have this control disabled (not selectable).

My code is:

<div class="field-list">@Html.DropDownListFor(model => model.LinguaCodiceMadre, Model.LinguaMadreList, new{ @disabled = "disabled" })</div>


But it doesn't work, my control is always enabled. Html page code is:

<select name="LinguaCodiceMadre" id="LinguaCodiceMadre" data-val-length-max="10" data-val-length="The field LinguaCodiceMadre must be a string with a maximum length of 10." data-val="true">
<option></option>
<option value="sq">Albanian</option>
<option value="de">German</option>
<option value="en">English</option>
<option value="fr">French</option>
<option value="it">Italian</option>
<option value="pt">Portuguese</option>
<option value="ru">Russian</option>
<option value="es">Spanish</option>
</select>


without the "disabled" attribute.

My real goal is to enable/disable dropdown conditionally, something like this:

<div class="field-list">@Html.DropDownListFor(model => model.LinguaCodiceMadre, Model.LinguaMadreList, new{@disabled=Model.IsDisabled ? "disabled" : "false"})</div>


but it doesn't work.

I tried both with

new{@disabled=Model.IsDisabled ? "disabled" : "false"}


and

new{disabled=Model.IsDisabled ? "disabled" : "false"}


but nothing, disabled attribute is not rendering on html page.

Anyone has an idea?

Answer

I solved my issue: there was a javascript in my code (I'm sorry, I did not notice right away) deleting disable attribute at document ready.

What I did is:

  • creating an extension for HtmlHelper:

public static class HtmlExtensions
{
    public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, string optionText, bool canEdit)
    {
        if (canEdit) return html.DropDownListFor(expression, selectList, optionText);
            return html.DropDownListFor(expression, selectList, optionText, new { @disabled = "disabled" });
    }
}
  • In razor view:

<code><div class="field-list">@Html.DropDownListFor(model => model.LinguaCodiceMadre, Model.LinguaMadreList, "", Model.IsEnabled)</div></code>

This works!

Thanks