Неверные данные в DropDownList - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть отношения один ко многим в приложении.Я хочу отображать данные в представлении, используя ViewBag, но вместо данных из базы данных я получаю имя пути класса модели.Мой код:

public class Department
{
    public int DepartmentId { get; set; }
    public string DepartmentName { get; set; }
    public ICollection<Instructor> Instructor { get; set; }
}

    [Key]
    public int InstructorId { get; set; }
    public string NameInstructor { get; set; }
    public string Email { get; set; }
    public string ScienceDegree { get; set; }
    public Department Department { get; set; }

Класс контроллера:

[HttpGet]
    public ActionResult Create()
    {
        var item = db.Departments.ToList();
        ViewBag.DepartmentName = new SelectList(item, "DepartmentName");
        return View();
    }

Просмотр класса:

@Html.DropDownList("DepartmentName", new SelectList(ViewBag.DepartmentName, "DepartmentName"))

В результате я получаю его вместо имен.Я тоже делал по руководствам, шаг за шагом, но это не помогает, к сожалению, я понятия не имею, что делать.enter image description here

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Вам нужно будет добавить SelectListItem к вашему списку SelectList, а не к фактическому списку отделов. Вы можете либо перебрать свой список, преобразовать каждый элемент в SelectListItem, который затем можете добавить в свой SelectList, либо использовать универсальный метод. Пример (учитывая, что ваш список отделов содержит два свойства: ID и Имя, если нет, вы можете изменить их в соответствии со своими потребностями):

public static List<System.Web.Mvc.SelectListItem> GenerateSelectList<T>(this IEnumerable<T> itemsToBeAppended)
    {
        List<SelectListItem> items = new List<SelectListItem>();
        foreach (T itemToBeAppended in itemsToBeAppended)
        {
            SelectListItem item = new SelectListItem();
            var type = itemToBeAppended.GetType();

            item.Value = type.GetProperty("ID").GetValue(itemToBeAppended).ToString();
            item.Text = type.GetProperty("Name").GetValue(itemToBeAppended).ToString();
            items.Add(item);
        }
        return items.OrderBy(x => x.Text).ToList();
    }
0 голосов
/ 15 ноября 2018

Пожалуйста, используйте DepartmentId вместо DepartmentName

@Html.DropDownList("DepartmentId", new SelectList(ViewBag.DepartmentName, "DepartmentName"))

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