MVC Dropdownlistfor<>

邮差的信 提交于 2019-12-09 06:49:36

问题


I just started a project in MVC. I am new to MVC asp.net. I want to add a dropdown list box like I used to add in asp.net.

code glimpses in asp.net for Dropdownlist box

<asp:Dropdownlist ID="ddlCity" runat="server">
<asp:ItemList Text="Kolkatta" Value="1"/>
<asp:ItemList Text="New Delhi" Value="2"/>
<asp:ItemList Text="Mumbai" Value="3"/>
<asp:ItemList Text="chennai" Value="4"/>
<asp:ItemList Text="Hydrabad" Value="5"/>
</asp:Dropdownlist>

I want a dropdown list box in that manner.... meaning, now I need to create a model and controller for that. Suppose I have already have a view named "Employee Entry Form" and I need to add one dropdown list only on that page. I do not want to create a model for this dropdown list; I only need it on this page.


回答1:


The values for the dropdownlist should be in your existing view model:

public class WhateverViewModel
{
    // All of your current viewmodel fields here
    public string SelectedCity { get; set; }
    public Dictionary<string, string> CityOptions { get; set; }
}

Populate these in your controller with whatever values you want (where SelectedCity is your numerical ID), then do the following in your view:

@Html.DropDownListFor(m => m.SelectedCity,
    new SelectList(Model.CityOptions, "Key", "Value", Model.SelectedCity))

If your values never change, you could hardcode them as a static member of your view model and then do:

@Html.DropDownListFor(m => m.SelectedCity,
    new SelectList(WhateverViewModel.CityOptions, "Key", "Value", Model.SelectedCity))

Either way, this is data for this view, so it belongs in your view model. If you're not using view models and this view is directly tied to a domain entity; you should be using them and now is as good a time as any to start.




回答2:


You can also follow another approach which is to collect all dropdown lists in 1 helper class and return theses lists each with a static function.

Ex. Dropdown helper class

namespace Asko.Web.Mvc.Infrastructure.Utils
{
    public static class DropdownHelper
    {
        public static IEnumerable<SelectListItem> GetAllCategories()
        {
            var categories = category.GetAll();
            return categories.Select(x => new SelectListItem { Text = x.categoryName, Value = x.categoryId.ToString()}));
        }
    }
}

And here you are going to use it in the page:

<td style="width: 150px;">
      <b>Category: </b>
      <br>
 @Html.DropDownListFor(m => m.CategoryId, DropdownHelper.GetAllCategories())
</td>



回答3:


If you want to avoid the usage of model, you may simply use a ViewBag. in your action:

ViewBag.DirectorId = new SelectList(ListOfItemsToAdd, "dataValueField", "dataTextField", movie.DirectorId);

and in the view:

<%= Html.DropDownList("VariableNameToPost", ViewBag.DirectorId) //for asp.net view engine %> 
@Html.DropDownList("VariableNameToPost", ViewBag.DirectorId) // for razor view engine

and the action that would accept the variable would then have something like this:

public ActionResult theAction(string VariableNameToPost){...}

refferences:

  • Select List
  • Drop Down List



回答4:


If you want to create a drop down directly on view regardless of controller and model then you can create it using following code

@Html.DropDownList("Departments", 
  new SelectList(new [] { new KeyValuePair<string, int>( "IT", 0 ), new KeyValuePair<string, int>( "HR", 1 )},"Value", "Key")) 


来源:https://stackoverflow.com/questions/17019272/mvc-dropdownlistfor

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