Asp.Net MVC DropDownList Data Binding

送分小仙女□ 提交于 2019-11-29 15:13:08

问题


                    <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 in controller. I mean how can I get the value of the dropDownList in the action method in controller class. Thanks.


回答1:


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

So in ASP.NET MVC you would start by defining a view model representing the data:

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

then you would define a controller with two actions (one that renders the view and another that handles the form submission):

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 would write the corresponding strongly 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>

This being said you could also hardcode this select inside your view (although this is something I wouldn't recommend):

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


来源:https://stackoverflow.com/questions/4759493/asp-net-mvc-dropdownlist-data-binding

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!