如何在MVC中为国家/地区/省创建选择列表

嗨,我是MVC的新手,甚至是asp ..

我想在MVC中创建一个表单。 在一些例子的帮助下,我能够创建TextBoxes,但是现在我不明白如何创建Select List./

我尝试了很多在MVC中实现Select List的例子,但我无法理解。

我有一个表格,其中一半用HTML编码,一半用MVC编写。

这是我的代码:

using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MedAvail.Applications.MedProvision.Web.Models { public class AddressViewModel { public string Street1 { get; set; } public string Street2 { get; set; } public string City { get; set; } public string Province { get; set; } public string Country { get; set; } public string PostalCode { get; set; } public string PhoneNumber { get; set; } } } 

Location Information

@Html.Label("Country") Select Country Canada United States *
@Html.LabelFor(x=>x.State) Select State State 1 State 2 State 3 ............... *
@Html.LabelFor(x=>x.PostalCode) @Html.TextBoxFor(x=>x.PostalCode)*
@Html.LabelFor(x=>x.City) @Html.TextBoxFor(x=>x.City)*
@Html.LabelFor(x=>x.StreetAddress1) @Html.TextBoxFor(x=>x.StreetAddress1)*
@Html.LabelFor(x=>x.StreetAddress2) @Html.TextBoxFor(x=>x.StreetAddress2)
@Html.LabelFor(x=>x.PhoneNumber) @Html.TextBoxFor(x=>x.PhoneNumber)

请指导我如何为这种表单创建选择列表。

 public static List States = new List() { new SelectListItem() {Text="Alabama", Value="AL"}, new SelectListItem() { Text="Alaska", Value="AK"}, new SelectListItem() { Text="Arizona", Value="AZ"}, new SelectListItem() { Text="Arkansas", Value="AR"}, new SelectListItem() { Text="California", Value="CA"}, new SelectListItem() { Text="Colorado", Value="CO"}, new SelectListItem() { Text="Connecticut", Value="CT"}, new SelectListItem() { Text="District of Columbia", Value="DC"}, new SelectListItem() { Text="Delaware", Value="DE"}, new SelectListItem() { Text="Florida", Value="FL"}, new SelectListItem() { Text="Georgia", Value="GA"}, new SelectListItem() { Text="Hawaii", Value="HI"}, new SelectListItem() { Text="Idaho", Value="ID"}, new SelectListItem() { Text="Illinois", Value="IL"}, new SelectListItem() { Text="Indiana", Value="IN"}, new SelectListItem() { Text="Iowa", Value="IA"}, new SelectListItem() { Text="Kansas", Value="KS"}, new SelectListItem() { Text="Kentucky", Value="KY"}, new SelectListItem() { Text="Louisiana", Value="LA"}, new SelectListItem() { Text="Maine", Value="ME"}, new SelectListItem() { Text="Maryland", Value="MD"}, new SelectListItem() { Text="Massachusetts", Value="MA"}, new SelectListItem() { Text="Michigan", Value="MI"}, new SelectListItem() { Text="Minnesota", Value="MN"}, new SelectListItem() { Text="Mississippi", Value="MS"}, new SelectListItem() { Text="Missouri", Value="MO"}, new SelectListItem() { Text="Montana", Value="MT"}, new SelectListItem() { Text="Nebraska", Value="NE"}, new SelectListItem() { Text="Nevada", Value="NV"}, new SelectListItem() { Text="New Hampshire", Value="NH"}, new SelectListItem() { Text="New Jersey", Value="NJ"}, new SelectListItem() { Text="New Mexico", Value="NM"}, new SelectListItem() { Text="New York", Value="NY"}, new SelectListItem() { Text="North Carolina", Value="NC"}, new SelectListItem() { Text="North Dakota", Value="ND"}, new SelectListItem() { Text="Ohio", Value="OH"}, new SelectListItem() { Text="Oklahoma", Value="OK"}, new SelectListItem() { Text="Oregon", Value="OR"}, new SelectListItem() { Text="Pennsylvania", Value="PA"}, new SelectListItem() { Text="Rhode Island", Value="RI"}, new SelectListItem() { Text="South Carolina", Value="SC"}, new SelectListItem() { Text="South Dakota", Value="SD"}, new SelectListItem() { Text="Tennessee", Value="TN"}, new SelectListItem() { Text="Texas", Value="TX"}, new SelectListItem() { Text="Utah", Value="UT"}, new SelectListItem() { Text="Vermont", Value="VT"}, new SelectListItem() { Text="Virginia", Value="VA"}, new SelectListItem() { Text="Washington", Value="WA"}, new SelectListItem() { Text="West Virginia", Value="WV"}, new SelectListItem() { Text="Wisconsin", Value="WI"}, new SelectListItem() { Text="Wyoming", Value="WY"} }; 

我们如何做到这一点是将此方法放入一个类中,然后从视图中调用该类

 @Html.DropDownListFor(x => x.State, Class.States) 

谢谢你们! 我现在可以根据MVC加载选择列表我的工作代码如下:

视图中的HTML + MVC代码: –

   @Html.Label("Country") @Html.DropDownListFor(x =>x.Province,SelectListItemHelper.GetCountryList())*   @Html.LabelFor(x=>x.Province) @Html.DropDownListFor(x =>x.Province,SelectListItemHelper.GetProvincesList())*  

在“UTIL”文件夹下创建一个Controller:代码: –

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MedAvail.Applications.MedProvision.Web.Util { public class SelectListItemHelper { public static IEnumerable GetProvincesList() { IList items = new List { new SelectListItem{Text = "California", Value = "B"}, new SelectListItem{Text = "Alaska", Value = "B"}, new SelectListItem{Text = "Illinois", Value = "B"}, new SelectListItem{Text = "Texas", Value = "B"}, new SelectListItem{Text = "Washington", Value = "B"} }; return items; } public static IEnumerable GetCountryList() { IList items = new List { new SelectListItem{Text = "United States", Value = "B"}, new SelectListItem{Text = "Canada", Value = "B"}, new SelectListItem{Text = "United Kingdom", Value = "B"}, new SelectListItem{Text = "Texas", Value = "B"}, new SelectListItem{Text = "Washington", Value = "B"} }; return items; } } } 

现在它的工作COOL 🙂

谢谢!!

这次真是万分感谢

这是我做的:

1.处理Utils文件夹中的Extensions.cs文件。

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Web.ProjectName.Utils { public class Extensions { public static IEnumerable GetStatesList() { IList states = new List { new SelectListItem() {Text="Alabama", Value="AL"}, new SelectListItem() { Text="Alaska", Value="AK"}, new SelectListItem() { Text="Arizona", Value="AZ"}, new SelectListItem() { Text="Arkansas", Value="AR"}, new SelectListItem() { Text="California", Value="CA"}, new SelectListItem() { Text="Colorado", Value="CO"}, new SelectListItem() { Text="Connecticut", Value="CT"}, new SelectListItem() { Text="District of Columbia", Value="DC"}, new SelectListItem() { Text="Delaware", Value="DE"}, new SelectListItem() { Text="Florida", Value="FL"}, new SelectListItem() { Text="Georgia", Value="GA"}, new SelectListItem() { Text="Hawaii", Value="HI"}, new SelectListItem() { Text="Idaho", Value="ID"}, new SelectListItem() { Text="Illinois", Value="IL"}, new SelectListItem() { Text="Indiana", Value="IN"}, new SelectListItem() { Text="Iowa", Value="IA"}, new SelectListItem() { Text="Kansas", Value="KS"}, new SelectListItem() { Text="Kentucky", Value="KY"}, new SelectListItem() { Text="Louisiana", Value="LA"}, new SelectListItem() { Text="Maine", Value="ME"}, new SelectListItem() { Text="Maryland", Value="MD"}, new SelectListItem() { Text="Massachusetts", Value="MA"}, new SelectListItem() { Text="Michigan", Value="MI"}, new SelectListItem() { Text="Minnesota", Value="MN"}, new SelectListItem() { Text="Mississippi", Value="MS"}, new SelectListItem() { Text="Missouri", Value="MO"}, new SelectListItem() { Text="Montana", Value="MT"}, new SelectListItem() { Text="Nebraska", Value="NE"}, new SelectListItem() { Text="Nevada", Value="NV"}, new SelectListItem() { Text="New Hampshire", Value="NH"}, new SelectListItem() { Text="New Jersey", Value="NJ"}, new SelectListItem() { Text="New Mexico", Value="NM"}, new SelectListItem() { Text="New York", Value="NY"}, new SelectListItem() { Text="North Carolina", Value="NC"}, new SelectListItem() { Text="North Dakota", Value="ND"}, new SelectListItem() { Text="Ohio", Value="OH"}, new SelectListItem() { Text="Oklahoma", Value="OK"}, new SelectListItem() { Text="Oregon", Value="OR"}, new SelectListItem() { Text="Pennsylvania", Value="PA"}, new SelectListItem() { Text="Rhode Island", Value="RI"}, new SelectListItem() { Text="South Carolina", Value="SC"}, new SelectListItem() { Text="South Dakota", Value="SD"}, new SelectListItem() { Text="Tennessee", Value="TN"}, new SelectListItem() { Text="Texas", Value="TX"}, new SelectListItem() { Text="Utah", Value="UT"}, new SelectListItem() { Text="Vermont", Value="VT"}, new SelectListItem() { Text="Virginia", Value="VA"}, new SelectListItem() { Text="Washington", Value="WA"}, new SelectListItem() { Text="West Virginia", Value="WV"}, new SelectListItem() { Text="Wisconsin", Value="WI"}, new SelectListItem() { Text="Wyoming", Value="WY"} }; return states; } } } 

2.在我的模型中,州将缩写(例如“AL”,“NY”等):

 using System.ComponentModel; using System.ComponentModel.DataAnnotations; namespace Web.ProjectName.Models { public class ContactForm { ... [Required] [Display(Name = "State")] [RegularExpression("[AZ]{2}")] public string State { get; set; } ... } } 

在我看来,我引用了它:

  @model Web.ProjectName.Models.ContactForm ... @Html.LabelFor(x => x.State, new { @class = "form-label" }) @Html.DropDownListFor(x => x.State, Web.ProjectName.Utils.Extensions.GetStatesList(), new { @class = "form-control" }) ... 

设计你的模型:

 Public class ModelName { ...// Properties public IEnumerable ListName { get; set; } } 

准备并将List绑定到Controller中的模型:

  public ActionResult Index(ModelName model) { var items = // Your List of data model.ListName = items.Select(x=> new SelectListItem() { Text = x.prop, Value = x.prop2 }); } 

在你看来:

 @Html.DropDownListFor(m => Model.prop2,Model.ListName) 

有很多方法可以做到这一点……

模型…

 namespace MyProject.Models { public class MyModel { [Required] [Display(Name = "State")] public string StatePick { get; set; } public string state { get; set; } [StringLength(35, ErrorMessage = "State cannot be longer than 35 characters.")] public SelectList StateList { get; set; } } } 

控制器…

 namespace MyProject.Controllers { ///  /// create SelectListItem from strings ///  /// defaultValue is SelectListItem.Value is true, SelectListItem.Text if false ///  private SelectListItem newItem(string value, string text, string defaultValue = "", bool isValue = false) { SelectListItem ss = new SelectListItem(); ss.Text = text; ss.Value = value; // select default by Value or Text if (isValue && ss.Value == defaultValue || !isValue && ss.Text == defaultValue) { ss.Selected = true; } return ss; } ///  /// this pulls the state name from _context and sets it as the default for the selectList ///  /// sets default value for list of states ///  private SelectList getStateList(string myState = "") { List states = new List(); SelectListItem chosen = new SelectListItem(); // set default selected state to OHIO string defaultValue = "OH"; if (!string.IsNullOrEmpty(myState)) { defaultValue = myState; } try { states.Add(newItem("AL", "Alabama", defaultValue, true)); states.Add(newItem("AK", "Alaska", defaultValue, true)); states.Add(newItem("AZ", "Arizona", defaultValue, true)); states.Add(newItem("AR", "Arkansas", defaultValue, true)); states.Add(newItem("CA", "California", defaultValue, true)); states.Add(newItem("CO", "Colorado", defaultValue, true)); states.Add(newItem("CT", "Connecticut", defaultValue, true)); states.Add(newItem("DE", "Delaware", defaultValue, true)); states.Add(newItem("DC", "District of Columbia", defaultValue, true)); states.Add(newItem("FL", "Florida", defaultValue, true)); states.Add(newItem("GA", "Georgia", defaultValue, true)); states.Add(newItem("HI", "Hawaii", defaultValue, true)); states.Add(newItem("ID", "Idaho", defaultValue, true)); states.Add(newItem("IL", "Illinois", defaultValue, true)); states.Add(newItem("IN", "Indiana", defaultValue, true)); states.Add(newItem("IA", "Iowa", defaultValue, true)); states.Add(newItem("KS", "Kansas", defaultValue, true)); states.Add(newItem("KY", "Kentucky", defaultValue, true)); states.Add(newItem("LA", "Louisiana", defaultValue, true)); states.Add(newItem("ME", "Maine", defaultValue, true)); states.Add(newItem("MD", "Maryland", defaultValue, true)); states.Add(newItem("MA", "Massachusetts", defaultValue, true)); states.Add(newItem("MI", "Michigan", defaultValue, true)); states.Add(newItem("MN", "Minnesota", defaultValue, true)); states.Add(newItem("MS", "Mississippi", defaultValue, true)); states.Add(newItem("MO", "Missouri", defaultValue, true)); states.Add(newItem("MT", "Montana", defaultValue, true)); states.Add(newItem("NE", "Nebraska", defaultValue, true)); states.Add(newItem("NV", "Nevada", defaultValue, true)); states.Add(newItem("NH", "New Hampshire", defaultValue, true)); states.Add(newItem("NJ", "New Jersey", defaultValue, true)); states.Add(newItem("NM", "New Mexico", defaultValue, true)); states.Add(newItem("NY", "New York", defaultValue, true)); states.Add(newItem("NC", "North Carolina", defaultValue, true)); states.Add(newItem("ND", "North Dakota", defaultValue, true)); states.Add(newItem("OH", "Ohio", defaultValue, true)); states.Add(newItem("OK", "Oklahoma", defaultValue, true)); states.Add(newItem("OR", "Oregon", defaultValue, true)); states.Add(newItem("PA", "Pennsylvania", defaultValue, true)); states.Add(newItem("RI", "Rhode Island", defaultValue, true)); states.Add(newItem("SC", "South Carolina", defaultValue, true)); states.Add(newItem("SD", "South Dakota", defaultValue, true)); states.Add(newItem("TN", "Tennessee", defaultValue, true)); states.Add(newItem("TX", "Texas", defaultValue, true)); states.Add(newItem("UT", "Utah", defaultValue, true)); states.Add(newItem("VT", "Vermont", defaultValue, true)); states.Add(newItem("VA", "Virginia", defaultValue, true)); states.Add(newItem("WA", "Washington", defaultValue, true)); states.Add(newItem("WV", "West Virginia", defaultValue, true)); states.Add(newItem("WI", "Wisconsin", defaultValue, true)); states.Add(newItem("WY", "Wyoming", defaultValue, true)); foreach (SelectListItem state in states) { if (state.Selected) { chosen = state; break; } } } catch (Exception err) { string ss = "ERR! " + err.Source + " " + err.GetType().ToString() + "\r\n" + err.Message.Replace("\r\n", " "); ss = this.sendError("Online getStateList Request", ss, _errPassword); // return error } SelectList myList = new SelectList(states.AsEnumerable(), "Value", "Text", chosen); object val = myList.SelectedValue; return myList; } public ActionResult pickState(MyModel pData) { if (pData.StateList == null) { if (String.IsNullOrEmpty(pData.StatePick)) // state abbrev, value collected onchange { pData.StateList = getStateList(); } else { pData.StateList = getStateList(pData.StatePick); } // assign values to state list items try { SelectListItem si = (SelectListItem)pData.StateList.SelectedValue; pData.state = si.Value; pData.StatePick = si.Value; } catch { } } } } 

pickState.cshtml …

 @model MyProject.Models.MyModel @{ ViewBag.Title = "United States of America"; Layout = "~/Views/Shared/_Layout.cshtml"; } 

@ViewBag.Title - Where are you...

@using (Html.BeginForm()) { @Html.AntiForgeryToken() @Html.ValidationSummary(true)
@Html.DisplayNameFor(model => model.state)
@Html.DropDownListFor(m => m.StatePick, Model.StateList, new { OnChange = "state.value = this.value;" }) @Html.EditorFor(model => model.state) @Html.ValidationMessageFor(model => model.StateList)
}
@Html.ActionLink("Back to List", "Index")

我也非常喜欢乔丹的回答并自己实施。 我只需要缩写,以防万一其他人需要相同的:

  public static IEnumerable GetStatesList() { IList states = new List { new SelectListItem() {Text="AL", Value="AL"}, new SelectListItem() { Text="AK", Value="AK"}, new SelectListItem() { Text="AZ", Value="AZ"}, new SelectListItem() { Text="AR", Value="AR"}, new SelectListItem() { Text="CA", Value="CA"}, new SelectListItem() { Text="CO", Value="CO"}, new SelectListItem() { Text="CT", Value="CT"}, new SelectListItem() { Text="DC", Value="DC"}, new SelectListItem() { Text="DE", Value="DE"}, new SelectListItem() { Text="FL", Value="FL"}, new SelectListItem() { Text="GA", Value="GA"}, new SelectListItem() { Text="HI", Value="HI"}, new SelectListItem() { Text="ID", Value="ID"}, new SelectListItem() { Text="IL", Value="IL"}, new SelectListItem() { Text="IN", Value="IN"}, new SelectListItem() { Text="IA", Value="IA"}, new SelectListItem() { Text="KS", Value="KS"}, new SelectListItem() { Text="KY", Value="KY"}, new SelectListItem() { Text="LA", Value="LA"}, new SelectListItem() { Text="ME", Value="ME"}, new SelectListItem() { Text="MD", Value="MD"}, new SelectListItem() { Text="MA", Value="MA"}, new SelectListItem() { Text="MI", Value="MI"}, new SelectListItem() { Text="MN", Value="MN"}, new SelectListItem() { Text="MS", Value="MS"}, new SelectListItem() { Text="MO", Value="MO"}, new SelectListItem() { Text="MT", Value="MT"}, new SelectListItem() { Text="NE", Value="NE"}, new SelectListItem() { Text="NV", Value="NV"}, new SelectListItem() { Text="NH", Value="NH"}, new SelectListItem() { Text="NJ", Value="NJ"}, new SelectListItem() { Text="NM", Value="NM"}, new SelectListItem() { Text="NY", Value="NY"}, new SelectListItem() { Text="NC", Value="NC"}, new SelectListItem() { Text="ND", Value="ND"}, new SelectListItem() { Text="OH", Value="OH"}, new SelectListItem() { Text="OK", Value="OK"}, new SelectListItem() { Text="OR", Value="OR"}, new SelectListItem() { Text="PA", Value="PA"}, new SelectListItem() { Text="PR", Value="PR"}, new SelectListItem() { Text="RI", Value="RI"}, new SelectListItem() { Text="SC", Value="SC"}, new SelectListItem() { Text="SD", Value="SD"}, new SelectListItem() { Text="TN", Value="TN"}, new SelectListItem() { Text="TX", Value="TX"}, new SelectListItem() { Text="UT", Value="UT"}, new SelectListItem() { Text="VT", Value="VT"}, new SelectListItem() { Text="VA", Value="VA"}, new SelectListItem() { Text="WA", Value="WA"}, new SelectListItem() { Text="WV", Value="WV"}, new SelectListItem() { Text="WI", Value="WI"}, new SelectListItem() { Text="WY", Value="WY"} }; return states; } 

制作下拉列表的最佳方式:

 grid.Column("PriceType",canSort:true,header: "PriceType",format: @ @item.PriceTypeDescription @Html.DropDownList("PriceType"+(int)item.ShoppingCartID,new SelectList(MvcApplication1.Services.ExigoApiContext.CreateODataContext().PriceTypes.Select(s => new { s.PriceTypeID, s.PriceTypeDescription }).AsEnumerable(),"PriceTypeID", "PriceTypeDescription",Convert.ToInt32(item.PriceTypeId)), new { @class = "PriceType",@style="width:120px;display:none",@selectedvalue="selected"}) ),