Altaf Sami
Altaf Sami

Reputation: 846

mvc 4 drop down default value selected

I want to select the default value in drop down list where policyId = 7 but it didn't select that value, what i am doing wrong?

Controller:

var pm = new ManagerClass();
IEnumerable<myClass> po = pm.GetDataFromDb();
IEnumerable<SelectListItem> Policies = new SelectList(po, "PolicyID", "PolicyName", new { PolicyID = 7 });
ViewBag.Policies = Policies;

View:

@Html.DropDownListFor(m => m.PolicyID, ViewBag.Policies as IEnumerable<SelectListItem>, new { @class = "dropdown-field"})

Upvotes: 5

Views: 17208

Answers (3)

CMoussalli
CMoussalli

Reputation: 26

In case that you have a static menu:

1- create the following class:

public static class StaticMenus
{

    public static List<string> GetGridRowsCount()
    {
        List<string> result = new List<string>();
        result.Add("3");
        result.Add("5");
        result.Add("10");
        result.Add("20");
        result.Add("25");
        result.Add("50");
        result.Add("100");

        return result;
    }
}

2- add the following code to your controller :

ViewData["CountryList"] = new SelectList(StaticMenus.GetGridRowsCount(),"10");

3- add the following code to your view:

@Html.DropDownList("MainGridRowsCount", ViewData["RowsCountList"] as SelectList)

Upvotes: 0

Mathew Thompson
Mathew Thompson

Reputation: 56429

It's because it's not actually selecting the value in the SelectList.

First, to make it nicer, put the items in your view model to prevent the cast (this is better practice too):

public class MyModel
{
    public int PolicyID { get; set; }
    public List<SelectListItem> Policies { get; set; }
    //rest of your model
}

Then populate it:

var model = new MyModel();
model.Policies = po
    .Select(p => new SelectListItem
    {
        Text = p.PolicyName,
        Value = p.PolicyID.ToString(),
        Selected = p.PolicyID == currentPolicyId //change that to whatever current is
    })
    .ToList();

Then in your view, do:

@Html.DropDownListFor(m => m.PolicyID, Model.Policies, new { @class = "dropdown-field"})

Upvotes: 8

Darin Dimitrov
Darin Dimitrov

Reputation: 1038810

Just set the PolicyID property on your view model to the value you want to be preselected:

var pm = new ManagerClass();
var po = pm.GetDataFromDb();
ViewBag.Policies = new SelectList(po, "PolicyID", "PolicyName");

viewModel.PolicyID = 7;
return View(viewModel);

Since your DropDownList is bound to the PolicyID property (m => m.PolicyID), then its value will be used when deciding which element to be preselected.

Upvotes: 7

Related Questions