public async Task <IActionResult> HideTheme(int?id)
        {
            // Если ИД пустой, ошибка
            if (id == null)
            {
                return(NotFound());
            }

            // Получаем нужный модуль по его ИД
            var module = _context.TheoryModule.SingleOrDefault(x => x.Id == id);

            if (module == null)
            {
                return(NotFound());
            }

            // Передаём в представление название темы
            ViewData["ModuleName"] = module.Name;

            // Получаем список всех студентов и тех, для которых эта тема скрыта
            var students = new List <ApplicationUser>();

            foreach (var user in _userManager.Users)
            {
                if (!(await _userManager.IsInRoleAsync(user, "teacher")))
                {
                    students.Add(user);
                }
            }
            var hiddenUsers = students.Where(x => x.HiddenThemes.Split('&').Any(t => t == id.ToString())).Select(x => x.Id).ToList();

            // Создаём модель, в которую записываем ИД темы и списки, полученные ранее
            HideThemeViewModel model = new HideThemeViewModel
            {
                ModuleId    = (int)id,
                AllUsers    = students,
                HiddenUsers = hiddenUsers
            };

            // Передаём модель в представление
            return(View(model));
        }
        public async Task <IActionResult> HideTheme(HideThemeViewModel model)
        {
            // Получаем список всех студентов и тех, для которых эта тема скрыта
            var students = new List <ApplicationUser>();

            foreach (var user in _userManager.Users)
            {
                if (!(await _userManager.IsInRoleAsync(user, "teacher")))
                {
                    students.Add(user);
                }
            }
            var hiddenUsers = students.Where(x => x.HiddenThemes.Split('&').Any(t => t == model.ModuleId.ToString())).Select(x => x.Id).ToList();

            if (model.HiddenUsers == null)
            {
                model.HiddenUsers = new List <string>();
            }

            // Получаем пользователей, для которых эта тема стала скрытой
            var addedUsers = model.HiddenUsers.Except(hiddenUsers);

            // Получаем пользователей, для которых эта тема перестала быть скрытой
            var removedUsers = hiddenUsers.Except(model.HiddenUsers);

            foreach (string id in addedUsers)
            {
                // Получаем пользователя по ИД
                var user = students.SingleOrDefault(x => x.Id == id);

                // Если пользователь не найден, продолжаем
                if (user == null)
                {
                    continue;
                }

                if (String.IsNullOrEmpty(user.HiddenThemes))
                {
                    // Если список скрытых для него тем - пустой, добавляем туда ИД этой темы
                    user.HiddenThemes = model.ModuleId.ToString();
                    _context.Update(user);
                }
                else if (!user.HiddenThemes.Split('&').Any(t => t == model.ModuleId.ToString()))
                {
                    // Если в списке скрытых для него тем не было этой темы раньше, добавляем её в конец.
                    user.HiddenThemes += "&" + model.ModuleId;
                    _context.Update(user);
                }
            }

            foreach (string id in removedUsers)
            {
                // Получаем пользователя по ИД
                var user = students.SingleOrDefault(x => x.Id == id);

                // Если пользователь не найден, продолжаем
                if (user == null)
                {
                    continue;
                }

                // Если нет скрытых от него тем, пропускаем его
                if (String.IsNullOrEmpty(user.HiddenThemes))
                {
                    continue;
                }

                // Разбиваем строку из БД на список скрытых тем
                var hiddenThemes = user.HiddenThemes.Split('&').ToList();
                if (hiddenThemes.Any(t => t == model.ModuleId.ToString()))
                {
                    // Если эта тема для него скрыта, удаляем её из списка
                    hiddenThemes.Remove(model.ModuleId.ToString());

                    if (hiddenThemes.Count == 0)
                    {
                        // Если не осталось больше скрытых тем, сохраняем в БД пустую строку
                        user.HiddenThemes = "";
                    }
                    else
                    {
                        // Если есть другие скрытые темы, составляем новую строку, которая будет храниться в БД
                        string s = "";
                        for (int i = 0; i < hiddenThemes.Count - 1; i++)
                        {
                            s += hiddenThemes[i] + "&";
                        }
                        s += hiddenThemes[hiddenThemes.Count - 1];
                        user.HiddenThemes = s;
                    }

                    _context.Update(user);
                }
            }

            await _context.SaveChangesAsync();

            // Возвращаемся к просмотру темы
            return(RedirectToAction("Details", new { id = model.ModuleId }));
        }