java_doctor_101
java_doctor_101

Reputation: 3357

DropDown in .Net MVC3

I am trying to create a dropdonw in my MVC web application.

Model

namespace projectname.Models 
{
public class DropDownModel
    {
         public int id{get; set;}
          puclic string value {get; set;}
    }
}

Controller

using projectname.Models;
{
public class DropDownController: Controller
    {
         public ActionResult Index()   //where Index is one of the view
         {
               List <SelectListItem> listItem = new List<SelectListItem>();
               DropDownModel drop = new DropDownModel();
                drop.id = 1;
                drop.value  = "First";

                listItem.Add(new SelectListItem() {Value = drop.Value, Text = drop.id.toString()});

                return view(listitem);
         }

    }

}

View

@{
ViewBag.Title = "Home Page";
}

<h2>@ViewBag.Message</h2>

<p>
To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.

</p>

However, the drop down is not being displayed on my Index view.

Upvotes: 0

Views: 83

Answers (3)

Win
Win

Reputation: 62260

There are a few ways of display DropDownList in MVC. Here is my way.

Note: You need a collection of SelectListItem in model.

Model

public class MyModel
{
    public int SelectedId { get; set; }
    public IList<SelectListItem> AllItems { get; set; }

    public MyModel()
    {
        AllItems = new List<SelectListItem>();
    }
}

Controller

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyModel();
        model.AllItems = new List<SelectListItem>
        {
            new SelectListItem { Text = "One",  Value = "1"},
            new SelectListItem { Text = "Two",  Value = "2"},
            new SelectListItem { Text = "Three",  Value = "3"}
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyModel model)
    {
        // Get the selected value
        int id = model.SelectedId;
        return View();
    }
}

View

@model DemoMvc.Controllers.MyModel
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    @Html.DropDownListFor(x => x.SelectedId, Model.AllItems)
    <input type="submit" value="Submit" />
}

enter image description here

Upvotes: 0

PaulBinder
PaulBinder

Reputation: 2052

I would suggest reading more about MVC. You have nothing rendering the dropdown on your view and you have a model that more or less does the same-thing your listitem is doing. This could be handled by one object instead of two. That said :

Controller

  public class HomeController : Controller
    {
        public ActionResult Index()
        {
            List<SelectListItem> listItem = new List<SelectListItem>();
            DropDownModel drop = new DropDownModel();
            drop.id = 1;
            drop.value = "First";

            listItem.Add(new SelectListItem() { Value = drop.id.ToString(), Text = drop.value });


            return View(listItem);
        }

    }

View Note the @Model List at the top of the view. This defines the strongly typed model asigned to the view. This Model is passed from the controller (listitem) to the view.

@model List<SelectListItem>

@{
    ViewBag.Title = "title";
}

@Html.DropDownList("name", Model)

<h2>title</h2>

Upvotes: 1

edhedges
edhedges

Reputation: 2718

You need to give your View the Model which is the listItem.

return View(listItem);

Upvotes: 0

Related Questions