MVC Привязка сложной модели к списку <T> - PullRequest
0 голосов
/ 10 марта 2020

Я новый нуб на c# MVC, и я действительно хотел бы получить помощь, если это возможно, или если кто-то может любезно указать мне правильное направление. Я потратил часы на поиски решения в Интернете, и мне еще предстоит найти что-то полезное, поэтому я публикую здесь.

Я работаю над созданием веб-приложения базы данных сотрудников для своей компании, и у меня есть для Например, следующие классы.

namespace my_app.Models.Employee
{
    public class Employee
    {

        public Employee()
        {
        }

        // id
        public int id { get; set; }

        // employee id/payroll no
        public string Employeeid { get; set; }

        // employee qualifications
        public IList<EmployeeQualification> EmployeeQualifications { get; set; }
    }
}


    namespace my_app.Models.Employee
    {
    public class EmployeeQualification
        {
            public EmployeeQualification()
            {
            }

            // employee Qualification id
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int Id { get; set; }

            // employee Qualification institution

            public string Institution { get; set; }

            // employee Qualification qualificaiton

            public string Qualification { get; set; }

            public IList<Employee> Employees { get; set; }

        }
    }

Сотрудник добавляется в EmployeeViewModel, который выглядит примерно так:

namespace my_app.ViewModels
{
    public class EmployeeViewModel
    {

        public Employee Employee { get; set; }

        // more stuff here
    }
}

Теперь у меня есть проблема, и мне нужна помощь: хотел бы отобразить сотрудника (т. е. имя, адрес и т. д. c) в представлении, а также иметь возможность перечислять квалификации сотрудника с возможностью добавления и удаления квалификаций.

Я видел много учебных пособий в Интернете о том, как это сделать с помощью AJAX и метода Entity Framework SaveChanges, и я уверен, что это сработает, но немного сложнее с тем, что я хочу сделать, это то, что я хотел бы, чтобы изменения остались на клиенте и только когда вся форма, включая любые изменения в объекте сотрудника, отправлена, тогда изменения сохраняются в базе данных.

Есть ли способ сделать это со стандартными mvc элементами управления или мне нужно написать тонну JavaScript, чтобы сохранить изменения в локальном массиве объектов и затем включить Форма отправки добавить дополнительные данные формы.

Я написал целую кучу jQuery, чтобы заставить его работать, но проблема в том, что мне нужно иметь эту функциональность на нескольких представлениях приложения и писать каждый раз столько кода не кажется умным.

Любая помощь будет принята с благодарностью, спасибо.

1 Ответ

0 голосов
/ 10 марта 2020

Надеюсь, я могу дать вам направление для продвижения вперед.

Во-первых, вам нужно изменить дизайн ваших моделей. По сути, 1 сотрудник может иметь много квалификаций, а 1 квалификация может принадлежать многим сотрудникам. Таким образом, у вас есть отношения многие ко многим здесь. Это означает, что вам нужно 3 модели (сотрудник, квалификация сотрудника, квалификация). Во 2-й модели будут храниться внешние ключи для сотрудника и квалификации.

Следующая вещь - это пользовательский интерфейс, вы хотите сохранить все изменения в пользовательском интерфейсе, прежде чем делать только 1 отправку для сохранения данных. На самом деле это очень хорошая идея с точки зрения удобного проектирования системы. Для этого вам просто нужно сохранить список SelectedQualificationIds. Затем сохраните этот список в скрытом поле, чтобы после отправки вы могли просто загрузить все квалификации из БД, сравнить со списком и соответственно удалить / добавить квалификацию.

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