DropDownListFor Not Selecting Value

asp.net Mvc

asp.net Mvc Problem Overview


I'm using the DropDownListFor helper method inside of an edit page and I'm not having any luck getting it to select the value that I specify. I noticed a similar question on Stackoverflow. The suggested workaround was to, "populate your SelectList in the view code". The problem is that I've already tried this and it's still not working.

<%= Html.DropDownListFor(model => model.States, new SelectList(Model.States.OrderBy(s => s.StateAbbr), "StateAbbr", "StateName", Model.AddressStateAbbr), "-- Select State --")%>

I have set a breakpoint and have verified the existence (and validity) of model.AddressStateAbbr. I'm just not sure what I'm missing.

asp.net Mvc Solutions


Solution 1 - asp.net Mvc

After researching for an hour, I found the problem that is causing the selected to not get set to DropDownListFor. The reason is you are using ViewBag's name the same as the model's property.

Example

public  class employee_insignia
{ 
   public int id{get;set;}
   public string name{get;set;}
   public int insignia{get;set;}//This property will store insignia id
}

// If your ViewBag's name same as your property name 
  ViewBag.Insignia = new SelectList(db.MtInsignia.AsEnumerable(), "id", "description", 1);

View

 @Html.DropDownListFor(model => model.insignia, (SelectList)ViewBag.Insignia, "Please select value")

The selected option will not set to dropdownlist, BUT When you change ViewBag's name to different name the selected option will show correct.

Example

ViewBag.InsigniaList = new SelectList(db.MtInsignia.AsEnumerable(), "id", "description", 1);

View

 @Html.DropDownListFor(model => model.insignia, (SelectList)ViewBag.InsigniaList , "Please select value")

Solution 2 - asp.net Mvc

If you're doing it properly and using a model--unlike all these ViewBag weirdos--and still seeing the issue, it's because @Html.DropDownListFor(m => m.MyValue, @Model.MyOptions) can't match MyValue with the choices it has in MyOptions. The two potential reasons for that are:

  1. MyValue is null. You haven't set it in your ViewModel. Making one of MyOptions have a Selected=true won't solve this.
  2. More subtly, the type of MyValue is different than the types in MyOptions. So like, if MyValue is (int) 1, but your MyOptions are a list of padded strings {"01", "02", "03", ...}, it's obviously not going to select anything.

Solution 3 - asp.net Mvc

Try:

<%= Html.DropDownListFor(
    model => model.AddressStateAbbr,
    new SelectList(
        Model.States.OrderBy(s => s.StateAbbr),
        "StateAbbr",
        "StateName",
        Model.AddressStateAbbr), "-- Select State --")%>

or in Razor syntax:

@Html.DropDownListFor(
    model => model.AddressStateAbbr,
    new SelectList(
        Model.States.OrderBy(s => s.StateAbbr),
        "StateAbbr",
        "StateName",
        Model.AddressStateAbbr), "-- Select State --")

The expression based helpers don't seem to respect the Selected property of the SelectListItems in your SelectList.

Solution 4 - asp.net Mvc

While not addressing this question - it may help future googlers if they followed my thought path:

I wanted a multiple select and this attribute hack on DropDownListFor wasn't auto selecting

Html.DropDownListFor(m => m.TrainingLevelSelected, Model.TrainingLevelSelectListItems, new {multiple= "multiple" })

instead I should have been using ListBoxFor which made everything work

Html.ListBoxFor(m => m.TrainingLevelSelected, Model.TrainingLevelSelectListItems)

Solution 5 - asp.net Mvc

I also having similar issue and I solve it by as follows, set the

model.States property on your controller to what you need to be selected

model.States="California"

and then you will get "California" as default value.

Solution 6 - asp.net Mvc

I know this is an old question but I have been having the same issue in 2020.

It turns out the issue was with the model property being called "Title", I renamed it to "GivenTitle" and it now works as expected.

From

Html.DropDownListFor(m => m.Title, Model.Titles, "Please Select", new { @class = "form-control" })

to

Html.DropDownListFor(m => m.GivenTitle, Model.GivenTitles, "Please Select", new { @class = "form-control" })

Solution 7 - asp.net Mvc

this problem is common. change viewbag property name to other then model variable name used on page.

Solution 8 - asp.net Mvc

One other thing to check if it's not all your own code, is to make sure there's not a javascript function changing the value on page load. After hours of banging my head against a wall reading through all these solutions, I discovered this is what was happening with me.

Solution 9 - asp.net Mvc

I encountered this issue recently. It drove me mad for about an hour. In my case, I wasn't using a ViewBag variable with the same name as the model property.

After tracing source control changes, the issue turned out to be that my action had an argument with the same name as the model property:

public ActionResult SomeAction(string someName)
{
    var model = new SomeModel();
    model.SomeNames = GetSomeList();
    //Notice how the model property name matches the action name
    model.someName = someName; 
}

In the view:

@Html.DropDownListFor(model => model.someName, Model.SomeNames)

I simply changed the action's argument to some other name and it started working again:

public ActionResult SomeAction(string someOtherName)
{
    //....
}

I suppose one could also change the model's property name but in my case, the argument name is meaningless so...

Hopefully this answer saves someone else the trouble.

Solution 10 - asp.net Mvc

The issue at least for me was tied to the IEnumerable<T>.

Basically what happened was that the view and the model did not have the same reference for the same property.

If you do this

IEnumerable<CoolName> CoolNames {get;set;} = GetData().Select(x => new CoolName{...});}

Then bind this using the

@Html.DropDownListFor(model => model.Id, Model.CoolNames)

The View loses track of the CoolNames property, a simple fix is just to add .ToList() After dooing a projection (.Select()) ;).

Solution 11 - asp.net Mvc

I had the same problem. In the example below The variable ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] has a SelectListItem list with a default selected value but such attribute is not reflected visually.

// data 
        var p_estadoAcreditacion = "NO";
        var estadoAcreditacion = new List<SelectListItem>();
        estadoAcreditacion.Add(new SelectListItem { Text = "(SELECCIONE)"    , Value = " "    });
        estadoAcreditacion.Add(new SelectListItem { Text = "SI"              , Value = "SI"   });
        estadoAcreditacion.Add(new SelectListItem { Text = "NO"              , Value = "NO"   });

        if (!string.IsNullOrEmpty(p_estadoAcreditacion))
        {
            estadoAcreditacion.First(x => x.Value == p_estadoAcreditacion.Trim()).Selected = true;
        }
         ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] = estadoAcreditacion;

I solved it by making the first argument of DropdownList, different to the id attribute.

// error:
@Html.DropDownList("SELECT__ACREDITO_MODELO_INTEGRADO"
, ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] as List<SelectListItem>
, new
{
id         = "SELECT__ACREDITO_MODELO_INTEGRADO"
...
// solved :
@Html.DropDownList("DROPDOWNLIST_ACREDITO_MODELO_INTEGRADO"
, ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] as List<SelectListItem>
, new
{
id         = "SELECT__ACREDITO_MODELO_INTEGRADO"

...

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsenfoView Question on Stackoverflow
Solution 1 - asp.net Mvcwut-excelView Answer on Stackoverflow
Solution 2 - asp.net MvcChad HedgcockView Answer on Stackoverflow
Solution 3 - asp.net MvcBnWastelandView Answer on Stackoverflow
Solution 4 - asp.net MvcfiatView Answer on Stackoverflow
Solution 5 - asp.net MvcPrageeth godageView Answer on Stackoverflow
Solution 6 - asp.net MvcSimonView Answer on Stackoverflow
Solution 7 - asp.net MvcSeliya HilalView Answer on Stackoverflow
Solution 8 - asp.net MvcBMillsView Answer on Stackoverflow
Solution 9 - asp.net MvcJuanRView Answer on Stackoverflow
Solution 10 - asp.net MvcjNiView Answer on Stackoverflow
Solution 11 - asp.net MvcPablo Alejandro Perez AcostaView Answer on Stackoverflow