Получение типа вместо значения - PullRequest
0 голосов
/ 24 февраля 2019

Попытка создать выпадающий список.Я хочу заполнить список значениями, но вместо этого я получаю в нем типы.

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 голосов
/ 25 февраля 2019

Предполагается, что у вас есть 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")
0 голосов
/ 24 февраля 2019

Попробуйте ввести IEnumerable<SelectListItem> следующим образом:

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

. x.Value и x.Text - требуемые свойства роли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...