为什么我在DropDownList中获得“System.Web.Mvc.SelectListItem”?
我相信我已正确绑定了我的数据,但我似乎无法获取每个SelectListItem的text属性以便正确显示。
我的模特:
public class Licenses { public SelectList LicenseNames { get; set; } public string SelectedLicenseName { get; set; } }
控制器:
[HttpGet] public ActionResult License() { try { DataTable LicsTable = BW.SQLServer.Table("GetLicenses", ConfigurationManager.ConnectionStrings["ProfressionalActivitiesConnection"].ToString()); ProfessionalActivities.Models.Licenses model = new ProfessionalActivities.Models.Licenses(); model.LicenseNames = new SelectList(LicsTable.AsEnumerable().Select(row => new SelectListItem { Value = row["Description"].ToString(), Text = "test" })); return PartialView("_AddLicense", model); } catch (Exception ex) { var t = ex; return PartialView("_AddLicense"); } }
视图:
@Html.DropDownList("LicenseNames", new SelectList(Model.LicenseNames, "Value", "Text", Model.LicenseNames.SelectedValue), new { htmlAttributes = new { @class = "form-control focusMe" } })
使用类型为SelectList
LicenseNames
属性的Items
属性
@Html.DropDownList("SelectedLicenseName", new SelectList(Model.LicenseNames.Items, "Value", "Text", Model.LicenseNames.SelectedValue))
或者使用DropDownListFor
帮助方法
@Html.DropDownListFor(d=>d.SelectedLicenseName, Model.LicenseNames.Items as List)
因此,当您发布表单时,可以检查SelectedLicenseName
属性
[HttpPost] public ActionResult Create(Licenses model) { //check model.SelectedLicenseName }
我显式设置了dataValueField
和dataTextField
名称。
new SelectListItem { Value = row["Description"].ToString(), Text = "test" }), "Value", "Text");
然后,您无需在视图Model.LicenseNames.Items as List
编写Model.LicenseNames.Items as List
(如您接受的答案中所建议的那样)。