mituw16
mituw16

Reputation: 5250

MVC5 DropDownListFor not selecting correct value

I realize there are tons of questions on SO about this particular issue, however none of the answers that I've already found are doing quite what I am doing.

View Model

public FreightDiscountViewModel()
    {
        Sign = new List<SelectListItem>();
        States = new List<SelectListItem>();

        FreightDiscounts = new List<FreightDiscountModel>();

        PopSign();
        PopStates();
    }

    public List<FreightDiscountModel> FreightDiscounts { get; set; }

    public List<SelectListItem> States { get; set; }

    public List<SelectListItem> Sign { get; set; }

    private void PopSign ()
    {
        Sign.Add(new SelectListItem { Text = "-", Value = "-" });
        Sign.Add(new SelectListItem { Text = "+", Value = "+" });
    }

    private void PopStates ()
    {
        States.Add(new SelectListItem { Value = "AL", Text = "Alabama" });
        States.Add(new SelectListItem { Value = "AK", Text = "Alaska" });
        States.Add(new SelectListItem { Value = "AZ", Text = "Arizona" });
        States.Add(new SelectListItem { Value = "AR", Text = "Arkansas" });
        States.Add(new SelectListItem { Value = "CA", Text  = "California" });
        States.Add(new SelectListItem { Value = "CO", Text = "Colorado" }); 
    }
}

View

 @for (var i = 0; i < Model.FreightDiscounts.Count; i++ )
 {
     <tr>
         <td>@Html.DropDownListFor(x => x.FreightDiscounts[i].State, Model.States, new { @class = "form-control" })</td>
     </tr>
 }

I am populating my FreightDiscounts list in my view model without issue, and right now for testing, I only have 1 state being returned, Alaska. So the 1 record that being populated in that list has the following info

AK, 
US, 
50, 
0, 
+

My question is that when the view loads, the state dropdown for the 1 record is set to Alabama (AL), and not Alaska like I would expect. Does anyone see anything obvious I am missing?\

Edit

JamieD77's answer fixed my problem. I changed my View to the following.

<td>
    @Html.DropDownListFor(x => x.FreightDiscounts[i].State, 
                                    new SelectList(Model.DStates, "key", "value", Model.FreightDiscounts[i].State), new { @class = "form-control" })
</td>

And I changed my View Model to the following

public Dictionary<String, String> DStates { get; set; }

DStates.Add("AL","Alabama" );
DStates.Add("AK","Alaska" );

Upvotes: 1

Views: 856

Answers (2)

JamieD77
JamieD77

Reputation: 13949

try using a SelectList and setting the selected item when you build the dropdownlistfor

@Html.DropDownListFor(x => x.FreightDiscounts[i].State, 
    new SelectList(Model.States, "Value", "Text", x.FreightDiscounts[i].State), 
    new { @class = "form-control" })

Upvotes: 4

Wolvenhaven
Wolvenhaven

Reputation: 335

Possibly because your Text and Value fields are reversed?

Edit: OP has updated his code, they originally were reversed.

Upvotes: 0

Related Questions