2011-01-21 2 views
6
    <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> 

Я хочу связать этот DropDownList с контроллером. Я имею в виду, как я могу получить значение dropDownList в методе действий в классе контроллера. Благодарю.Asp.Net MVC DropDownList Data Binding

ответ

9

Я вижу, что вы используете формы с runat="server" и asp:XXX веб-элементы управления. Эти понятия никогда не должны использоваться в ASP.NET MVC. Больше нет ViewState и PostBacks, на которые полагаются эти серверные элементы управления.

Так в ASP.NET MVC вы бы начать с определением модели представления, представляющим данные:

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

, то вы бы определить контроллер с двумя действиями (тот, который делает вид, а другие, что ручки представление формы):

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 
     ... 
    } 
} 

и, наконец, вы должны написать соответствующий строго типизированный Index вид:

<%@ 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> 

Это существо сказал, что вы могли бы также жёстко этот выбор внутри вашей точки зрения (хотя это то, что я бы не рекомендовал):

<% 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" /> 
<% } %> 

и имеют следующий контроллер:

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 
     ... 
    } 
} 
+0

Как может Я использую этот код var model = new ItemsViewModel { Items = new [] { новый SelectListItem {Value = "Theory", Text = "Theory"}, new Выбрать ListItem {Value = "Appliance", Text = "Appliance"}, new SelectListItem {Value = "Lab", Text = "Lab"} } }; если я хочу получить значения выпадающего списка из базы данных. пожалуйста, предложите мне, что мне делать, если я беру значения из базы данных, а какой код я буду использовать? –

+0

@Pushpendra Kuntal, который будет зависеть от того, какую базу данных вы используете, как выглядит ваша схема таблицы базы данных и какая технология доступа к базе данных вы используете. –