问题
I believe I have bound my data correctly, but I can't seem to get my text property for each SelectListItem to show properly.
My model:
public class Licenses
{
public SelectList LicenseNames { get; set; }
public string SelectedLicenseName { get; set; }
}
Controller:
[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");
}
}
View:
@Html.DropDownList("LicenseNames", new SelectList(Model.LicenseNames, "Value", "Text", Model.LicenseNames.SelectedValue), new { htmlAttributes = new { @class = "form-control focusMe" } })
回答1:
Use the Items
property of your LicenseNames
property which is of type SelectList
@Html.DropDownList("SelectedLicenseName", new SelectList(Model.LicenseNames.Items,
"Value", "Text", Model.LicenseNames.SelectedValue))
Or with the DropDownListFor
helper method
@Html.DropDownListFor(d=>d.SelectedLicenseName,
Model.LicenseNames.Items as List<SelectListItem>)
So when you post your form, you can inspect the SelectedLicenseName
property
[HttpPost]
public ActionResult Create(Licenses model)
{
//check model.SelectedLicenseName
}
回答2:
I explicitly set the dataValueField
and dataTextField
names.
new SelectListItem
{
Value = row["Description"].ToString(),
Text = "test"
}), "Value", "Text");
Then there's no need to write Model.LicenseNames.Items as List<SelectListItem>
in your views (as suggested in your accepted answer).
来源:https://stackoverflow.com/questions/35755862/why-i-am-getting-system-web-mvc-selectlistitem-in-my-dropdownlist