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());
        }
Ejemplo n.º 2
0
        public ActionResult EditNoTypesProps(NoTypesPropsHelp model)
        {
            //проблема с определением типа во вью. Везде видит инт64 как бы не выходит так тонко провалидировать пользовательские свойства
            //json строка с польз свойствами
            string specialProp  = model.notypesforSave.special;
            string forSerialize = "";

            //если есть пользовательске свойства
            if (!string.IsNullOrEmpty(specialProp))
            {
                forSerialize = "{" + specialProp.Remove(0, 1) + "}";
            }

            //собираем сюда возможные ошибки
            List <ErrorUserProp> test = tagConfigurator.checkUserPropsValidity(forSerialize);

            //если польз свойства не валидны
            if (test.Count > 0)
            {
                var callBackString = json.Serialize(test);
                ViewBag.StdPropsValidityError = callBackString;
            }

            var IdForSave = model.notypesforSave.Id;

            if (ModelState.IsValid)
            {
                //даже если модель, включающая стандартные свойства валидна, смотрим есть ли ошибки в польз-х свойствах
                if (test.Count > 0)
                {
                    ViewBag.Notification = 0;
                    //перетираем строку модели в соответствии с ошибками
                }
                else
                {
                    //если валидны и польз и стандратные, то сохраняем
                    tagConfigurator.saveNoTypesProps1(model);
                    ViewBag.Notification = 1;
                }
            }
            else
            {
                ViewBag.Notification = 0;
            }
            ViewBag.ActiveModules = tagConfigurator.GetConnectedModules();
            ViewBag.OPCservers    = tagConfigurator.getOpcServersName();

            //здесь собраны станд свойства,полученные с формы (а не из БД) по результатам изменения пользователем
            //ибо если пользователь исправит  одно из невалидных значений,а другое по результатам исправлений останется невалидным,
            //то при возвращении формы с ошибками снова вернутся старые значения
            //и только когда все валидно произойдет сохранение
            Dictionary <string, dynamic> userProps = new Dictionary <string, dynamic>();

            if (!string.IsNullOrEmpty(specialProp))
            {
                userProps = tagConfigurator.getUserPropsAfterValidate(specialProp);
            }
            //var userProps = tagConfigurator.getUserProps(IdForSave);
            ViewBag.SelectChannel = tagConfigurator.getChannels();
            ViewBag.UserProps     = userProps;
            var standartProps = tagConfigurator.getStandartProps(IdForSave);

            ViewBag.StandartProps = standartProps;
            //если не создать объект класса NoTypeNodeHelp, то при null значении вью дает NullPointerException
            if (model.notypesModel == null)
            {
                var stdProp = new NoTypeNodeHelp();
                model.notypesModel = stdProp;
            }
            return(PartialView("NoTypeNodePartial", model));
            //return PartialView("NoTypeNodePartial");
        }