尝试创建一个下拉框。我想用值填充列表,但我却在其中添加类型。
ViewModel
public class AdminViewModel
{
...
public IEnumerable<SelectListItem> Roles { get; set; }
}
控制器
[HttpGet]
public ActionResult AddAdmin()
{
DataAccessLayer.DoloContext col = new DataAccessLayer.DoloContext();
List<Roles> list = new List<Roles>(col.Roles.ToList());
AdminViewModel viewMod = new AdminViewModel();
viewMod.Roles = new SelectList(list);
return View(viewMod);
}
查看
<div class="form-group">
@Html.LabelFor(model => model.Roles, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.Roles, (SelectList) Model.Roles, "RoleName", "Choose")
</div>
</div>
我在下拉列表中得到的是AuthSys.Models.Roles
我在做什么错? 我尝试将其与可以在此处找到的示例进行比较,但最后,我一直在获取类型。
答案 0 :(得分:1)
尝试如下填充您的IEnumerable<SelectListItem>
:
viewMod.Roles = col.Roles
.ToList()
.Select(x => new SelectListItem()
{
Value = x.Value,
Text = x.Text
}).ToList();
以x.Value
和x.Text
为角色的理想属性。
答案 1 :(得分:1)
假设您在数据源中具有Roles
类,如下所示:
public class Roles
{
public int RoleId { get; set; }
public string RoleName { get; set; }
}
如果要从IEnumerable<SelectListItem>
获取选定的值,请执行以下步骤:
1)创建其他属性,该属性将在viewmodel中保存选定的值。
public class AdminViewModel
{
public int SelectedRoleId { get; set; }
public IEnumerable<SelectListItem> Roles { get; set; }
}
2)将选项列表绑定到IEnumerable<SelectListItem>
属性中,如下所示:
public ActionResult AddAdmin()
{
DataAccessLayer.DoloContext col = new DataAccessLayer.DoloContext();
var viewMod = new AdminViewModel();
List<Roles> list = col.Roles.ToList();
viewMod.Roles = list.Select(x => new SelectListItem {
Text = x.RoleName,
Value = x.RoleId
}).ToList();
return View(viewMod);
}
3)最后,将选定的值属性和选项列表绑定到DropDownListFor
帮助程序,也不需要将Roles
选项列表转换为SelectList
,因为Roles
已经具有类型IEnumerable<SelectListItem>
:
@Html.DropDownListFor(model => model.SelectedRoleId, Model.Roles, "Choose")