Theory

Forwarding Asp.Net MVC DropDownList Data

<form id="Form1" runat="server"> <asp:DropDownList ID="dvmDrmList" runat="server"> <asp:ListItem>Theory</asp:ListItem> <asp:ListItem>Appliance</asp:ListItem> <asp:ListItem>Lab</asp:ListItem> </asp:DropDownList> </form> 

I want to bind this DropDownList to the controller. I mean, how can I get the value of dropDownList in the action method in the controller class. Thanks.

+6
drop-down-menu asp.net-mvc-2
source share
1 answer

I see that you are using forms with the web controls runat="server" and asp:XXX . These concepts should never be used in ASP.NET MVC. There are no more ViewState and PostBacks these server controls rely on.

So, in ASP.NET MVC, you should start by defining a view model that represents the data:

 public class ItemsViewModel { public string SelectedItemId { get; set; } public IEnumerable<SelectListItem> Items { get; set; } } 

then you must define a controller with two actions (one of which displays the view, and the other with the processing of the form):

 public class HomeController : Controller { public ActionResult Index() { var model = new ItemsViewModel { Items = new[] { new SelectListItem { Value = "Theory", Text = "Theory" }, new SelectListItem { Value = "Appliance", Text = "Appliance" }, new SelectListItem { Value = "Lab", Text = "Lab" } } }; return View(model); } [HttpPost] public ActionResult Index(ItemsViewModel model) { // this action will be invoked when the form is submitted and // model.SelectedItemId will contain the selected value ... } } 

and finally, you should write the corresponding strictly typed Index view:

 <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<AppName.Models.ItemsViewModel>" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Home Page </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <% using (Html.BeginForm()) { %> <%= Html.DropDownListFor(x => x.SelectedItemId, new SelectList(Model.Items, "Value", "Text")) %> <input type="submit" value="OK" /> <% } %> </asp:Content> 

Having said that, you can also program this choice inside your view (although I would not recommend this):

 <% using (Html.BeginForm()) { %> <select name="selectedItem"> <option value="Theory">Theory</option> <option value="Appliance">Appliance</option> <option value="Lab">Lab</option> </select> <input type="submit" value="OK" /> <% } %> 

and have the following controller:

 public class HomeController : Controller { public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(string selectedItem) { // this action will be invoked when the form is submitted and // selectedItem will contain the selected value ... } } 
+9
source share

All Articles