public ActionResult ActionsList(int?contentTypeId, string controllerName)
        {
            // модель
            ActionsListViewModel model = new ActionsListViewModel();

            // список контроллеров и их экшенов
            List <ControllerAction> caList = ControllerActionList.GetList();

            // данные типа контента
            List <ContentType> ct = new List <ContentType>();

            ct = contenttype.ContentTypeList(contentTypeId, "");

            // прогоняем весь список
            foreach (var i in caList)
            {
                // поиск контроллера в списке
                if (i.Controller == controllerName)
                {
                    // экшены
                    List <Permission> actions = new List <Permission>();

                    // прогоняем все экшены
                    foreach (var j in i.Actions)
                    {
                        // экшен
                        Permission action = new Permission();

                        action.Name     = j;
                        action.Selected = false; // по-умолчанию
                        action.Title    = "";

                        // может быть ситуация, что, к примеру, еще нет ни одного типа контента...
                        // поэтому делаем следующее, если список типов контента не пуст
                        if (ct.Count() != 0)
                        {
                            // если 'contentTypeId' = null, то условие ниже никогда не выполнится, т.к.
                            // в списке 'caList' не будет контроллеров, кот. в 'ct[0].Controller', потому что в
                            // 'caList' только свободные контроллеры

                            // условие ниже только для изменения, а не на создание типа контента

                            // ищем совпадения экшенов по 'ContentType', кот. в 'ct[0]' для того, чтобы
                            // указать 'Selected' в общий список экшенов
                            // данный подход необходим в случае, если в контроллер добавились новые экшены и
                            // мы должны видеть их в списке
                            // если мы возращаемся к предыдущему контроллеру, то восстанавливаем все отмеченные экшены
                            if (controllerName == ct[0].Controller)
                            {
                                foreach (var f in ct[0].Actions)
                                {
                                    if (j == f.Name)
                                    {
                                        action.Selected = f.Selected;
                                        action.Title    = f.Title;
                                    }
                                }
                            }
                        }

                        // добавляем в экшены
                        actions.Add(action);
                    }

                    // добавляем в модель
                    model.Actions = actions;
                }
            }

            return(PartialView(model));
        }
        public ActionResult Create()
        {
            // модель
            CreateContentTypeViewModel model = new CreateContentTypeViewModel();

            // список контроллеров и их экшенов
            List <ControllerAction> caList = ControllerActionList.GetList();

            // данные Всех типов контента
            List <ContentType> ctAll = new List <ContentType>();

            ctAll = contenttype.ContentTypeList(null, "");

            // список контроллеров и их экшенов из сборки 'WebSphere.WebUI'
            foreach (var i in caList.ToList())
            {
                // список контроллеров и их экшенов из БД
                foreach (var j in ctAll)
                {
                    // удаляем из 'caList' занятые контроллеры с экшенами
                    if (i.Controller == j.Controller && j.Actions[0].Selected)
                    {
                        caList.Remove(i);
                    }
                }
            }

            // проверка 'caList' есть ли свободные контроллеры
            // невозможно создать новый тип контента без свободного контроллера
            if (caList.Count() != 0)
            {
                ViewBag.EmptyCaListKey = 1; // список 'caList' не пуст

                // список групп типов контента
                List <ContentGroup> contentgrouplist = contenttype.GetContentTypeGroups(null);
                ViewBag.ContentGroupList = contentgrouplist;

                // закидываем пересобранный список во 'ViewBag'
                ViewBag.caList = caList;

                // сериализуем 'caList' для 'ChangePartial'
                model.caList = json.Serialize(caList);

                // экшены
                List <Permission> actions = new List <Permission>();

                // прогоняем все экшены в 'caList[0]',
                // т.к. по-умолчанию в списке контроллеров именно тот, кот. в [0], то и экшены соответсвующие
                foreach (var i in caList[0].Actions)
                {
                    // экшен
                    Permission action = new Permission();

                    action.Name     = i;
                    action.Selected = false; // по-умолчанию

                    // добавляем в экшены
                    actions.Add(action);
                }

                // добавляем в модель
                model.Actions = actions;

                return(PartialView(model));
            }

            ViewBag.EmptyCaListKey = null; // список 'caList' пуст

            return(PartialView());
        }
        public ActionResult Change(string obj)
        {
            // модель
            ChangeContentTypeViewModel model = new ChangeContentTypeViewModel();

            // список контроллеров и их экшенов
            List <ControllerAction> caList = ControllerActionList.GetList();

            // данные Всех типов контента
            List <ContentType> ctAll = new List <ContentType>();

            ctAll = contenttype.ContentTypeList(null, "");

            // данные типа контента по 'Name'
            List <ContentType> ct = new List <ContentType>();

            ct = contenttype.ContentTypeList(null, obj);

            // список групп типов контента
            List <ContentGroup> contentgrouplist = contenttype.GetContentTypeGroups(null);

            ViewBag.ContentGroupList = contentgrouplist;

            // наполняем модель
            model.Id           = ct[0].Id;
            model.Name         = ct[0].Name;
            model.Controller   = ct[0].Controller;
            model.contentGroup = ct[0].contentGroup;

            // список контроллеров и их экшенов из сборки 'WebSphere.WebUI'
            foreach (var i in caList.ToList())
            {
                // список контроллеров и их экшенов из БД
                foreach (var j in ctAll)
                {
                    // удаляем из 'caList' занятые контроллеры с экшенами, кроме текущего контроллера 'ct[0].Controller'
                    if (i.Controller == j.Controller && i.Controller != ct[0].Controller && j.Actions[0].Selected)
                    {
                        caList.Remove(i);
                    }
                }
            }

            // закидываем пересобранный список во 'ViewBag'
            ViewBag.caList = caList;

            // сериализуем 'caList' для 'ChangePartial'
            model.caList = json.Serialize(caList);

            // удаляем контроллер из списка экшенов, кот. в 'ct[0]', оставляем только экшены
            ct[0].Actions.RemoveAt(0);

            // прогоняем весь список экшенов по текущему контроллеру в 'ct[0]' по 'caList'
            foreach (var i in caList)
            {
                // поиск контроллера в списке
                if (i.Controller == ct[0].Controller)
                {
                    // экшены
                    List <Permission> actions = new List <Permission>();

                    // прогоняем все экшены
                    foreach (var j in i.Actions)
                    {
                        // экшен
                        Permission action = new Permission();

                        action.Name     = j;
                        action.Selected = false; // по-умолчанию
                        action.Title    = "";

                        // ищем совпадения экшенов по 'ContentType', кот. в 'ct[0]' для того, чтобы
                        // указать 'Selected' в общий список экшенов
                        // данный подход необходим в случае, если в контроллер добавились новые экшены и
                        // мы должны видеть их в списке
                        foreach (var f in ct[0].Actions)
                        {
                            if (j == f.Name)
                            {
                                action.Selected = f.Selected;
                                action.Title    = f.Title;
                            }
                        }

                        // добавляем в экшены
                        actions.Add(action);
                    }

                    // добавляем в модель
                    model.Actions = actions;
                }
            }

            return(PartialView(model));
        }