@z_a_p_a_r_a

Как в представлении Create/Update задать не ID связной сущности а поле Name?

Здравствуйте знатоки.
Суть следующая - есть модели:
public class Department
    {
        public int DepartmentID { get; set; }
        public string Name { get; set; }

        public List<Person> Persons { get; set; }
    }
 public class Person
    {
        public int PersonID { get; set; }
        public string Name { get; set; }

        public int DepartmentID { get; set; }
        public Department Department { get; set; }
    }

Ну и соответственно контекст:
public class DepartmentContext : DbContext
    {
        public DepartmentContext (DbContextOptions<DepartmentContext> options)
            : base(options)
        {
        }

        public DbSet<Department> Department { get; set; }

        public DbSet<Person> Person { get; set; }
    }

VS сгенерировало контроллер, все работает... При отображении Person показывало имя и ID Department, ну здесь я все подправил и показывает имя Department. Но вот с редактированием и созданием проблема. Изначально сгенерировало код контроллера :
public IActionResult Create()
        {
            ViewData["DepartmentID"] = new SelectList(_context.Department, "DepartmentID", "DepartmentID");
            return View();
        }
[HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("PersonID,Name,DepartmentID")] Person person)
        {
            if (ModelState.IsValid)
            {
                _context.Add(person);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
            ViewData["DepartmentID"] = new SelectList(_context.Department, "Name", "Name", person.DepartmentID);
            return View(person);
        }

Ну и View:
<div class="form-group">
                <label asp-for="Name" class="control-label"></label>
                <input asp-for="Name" class="form-control" />
                <span asp-validation-for="Name" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="DepartmentID" class="control-label"></label>
                <select asp-for="DepartmentID" class ="form-control" asp-items="ViewBag.DepartmentID"></select>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>

Соответственно при создании нового человека будет страничка с полем имя и выпадающий список DepartmentID. Я попробовал и сделал что бы выпадающий список был имя Department, НО как теперь сохранить? выдает ошибку....
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Конструктор SelectList имеет сигнатуру :
public SelectList (System.Collections.IEnumerable items, 
                   string dataValueField, 
                   string dataTextField,
                   object selectedValue);

Поэтому вторым параметром необходимо указать имя свойства для значений элементов option:
new SelectList(_context.Department, 
               nameof(Department.DepartmentID), 
               nameof(Department.Name), 
               person.DepartmentID);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы