2013-05-21 5 views
5

Ich möchte den Standardwert in der Dropdown-Liste auswählen, wo policyId = 7, aber es wählte diesen Wert nicht, was mache ich falsch?mvc 4 drop down Standardwert ausgewählt

Controller:

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

Ausblick:

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

Antwort

7

Stellen Sie einfach die PolicyID Eigenschaft auf Ihrer Ansicht Modell auf den Wert, den Sie vorgewählt werden möchten:

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

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

Da Ihre Dropdownlist ist an die PolicyID Eigenschaft gebunden (m => m.PolicyID), dann wird der Wert verwendet, um zu entscheiden, welches Element vorausgewählt werden soll.

+1

Ich habe dies bereits versucht, aber nicht funktioniert. –

+0

Auf Bearbeitungsseite funktioniert das, aber in der Seite addierte es nicht. Ich gebe die ID zu Modell auch in add Seite wie Sie gerade tun. –

+1

Ich weiß nicht, über welche Edit- und Add-Seiten du redest. Das hat immer für mich funktioniert. Es wäre hilfreich, ein vollständiges Beispiel zu zeigen, mit dem Sie das Problem reproduzieren können, um Ihr Szenario besser zu verstehen. –

8

Es ist, weil es nicht wirklich den Wert in SelectList auswählt.

Zuerst machen es schöneres, die Artikel in Ihrem View-Modell setzen die Besetzung (dies ist eine bessere Praxis zu) zu verhindern:

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

Dann ist es füllen:

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(); 

dann in Ihrer Ansicht nach tun:

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

Dies ist für Dropdownlist:

Controller:

Liste FieldListItems = new List();

FieldListItems.Add (neues SelectListItem {Text = "Projekt ID", Value = "Projekt_ID"});

FieldListItems.Add (neues SelectListItem {Text = "Projektname", Value = "Projektname"});

ViewBag.SearchByList = neue SelectList (FieldListItems, "Value", "Text", selectedValue: Project_ID);

The View:

Sortierung nach: @ Html.DropDownList ("sortOrder" (Select) ViewBag.SortingByList)

Sie können selectedValue auf das Element in der Steuerung ändern Sie als Standard

0

Falls Sie möchten, dass Sie ein statisches Menü haben:

1- die folgende Klasse erstellen:

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- Fügen Sie Ihrem Controller den folgenden Code hinzu:

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

3- Fügen Sie den folgenden Code zu Ihrer Ansicht hinzu:

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