获取类型而不是值

时间:2019-02-24 16:04:01

标签: c# asp.net-mvc razor

尝试创建一个下拉框。我想用值填充列表,但我却在其中添加类型。

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

我在做什么错? 我尝试将其与可以在此处找到的示例进行比较,但最后,我一直在获取类型。

2 个答案:

答案 0 :(得分:1)

尝试如下填充您的IEnumerable<SelectListItem>

   viewMod.Roles = col.Roles
     .ToList()
     .Select(x => new SelectListItem()
       { 
          Value = x.Value,
          Text = x.Text
       }).ToList();

x.Valuex.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")