为什么我在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 } 

我显式设置了dataValueFielddataTextField名称。

 new SelectListItem { Value = row["Description"].ToString(), Text = "test" }), "Value", "Text"); 

然后,您无需在视图Model.LicenseNames.Items as List编写Model.LicenseNames.Items as List (如您接受的答案中所建议的那样)。