Sometimes it our ASP.NET MVC application it becomes necessary to populate dropdown with dynamic values such as from the database. So here in the controller you can create a list object of type SelectListItem, fill it with values and then send this object to the View.
Let’s take a simple example of filling a dropdown list with different states of America. In the controller’s action create a list object of type SelectListItem, add some items to it. Finally send this list object to the View using a ViewBag object. Check the below code:
Controller
public ActionResult Index() { List<SelectListItem> States = new List<SelectListItem>() { new SelectListItem() {Text="Alabama", Value="AL"}, new SelectListItem() { Text="West Virginia", Value="WV"}, new SelectListItem() { Text="Wisconsin", Value="WI"}, new SelectListItem() { Text="Wyoming", Value="WY"} }; ViewBag.CategoryList = States; return View(); }
View
@Html.DropDownList("state", ViewBag.CategoryList as IEnumerable)
In the View I simply bind the DropDownList with the ViewBag variable. In this way the dropdownlist gets populated with the dynamic values returned from the controller’s action method.
Suppose I have to bind DropDownList from the Model which in my case is the marks of a student in different subjects.
So add a Model class called Marks.cs with the following code.
public class Marks { public string subject { get; set; } public int marks { get; set; } public Marks(string subjectVal, int marksVal) { subject = subjectVal; marks = marksVal; } }
In the controller create an array of Model Class object and return it to View.
public ActionResult Index() { Marks marks = new Marks[] { new Marks("English", 98), new Marks("Maths", 92), new Marks("Science", 83), new Marks("Physics", 99) }; return View(marks); }
In the View simply use the Html.DropDownListFor() helper. In it’s second parameter pass a SelectList object that should contain 3 things:
@Html.DropDownListFor(m => m.marks, new SelectList(Model.marks, "marks", "subject"))
Note: Use .Concat() method to add initial value (Text=”All” & Value=”All”) to dropdownlist like:
@Html.DropDownListFor(m => m.marks, new List<SelectListItem> { new SelectListItem { Text = "All", Value = "All" } }.Concat(new SelectList(Model.marks, "marks", "subject")))
You can also pass List of class objects to the View and bind the DropDownList with them. In the same example I can create a List object in the action method and return it to the View.
public ActionResult Index() { List<Marks> marks = new List<Marks>() { new Marks("Maths", 90), new Marks("Science", 80), new Marks("Physics", 95) }; return View(marks); }
Finally in the View do like this:
@model List<demo.Models.Marks> @Html.DropDownList("myDDL", new SelectList(Model, "marks", "subject"))
I have written 2 very useful tutorial on Validation in ASP.NET MVC. You should check them:
1. Server Side Validation in ASP.NET Core
2. Client Side Validation in ASP.NET Core
Share this article -