public JsonResult GetPropertiesByFormID(int id)
 {
     try
     {
         RequestPackage request = new RequestPackage() { requestID = id };
         List<ControlPropertyViewModel> response = new ControlPropertyLogic().GetPropertiesByFormID(request).GetDataOrExceptionIfError();
         return Json(response);
     }
     catch (Exception ex)
     {
         return this.HandleException(ex);
     }
 }
        /// <summary>
        /// Функция, получающая древовидную структуру формы по ее ID
        /// </summary>
        /// <param name="package">Объект-оболочка RequestPackage, содержащая в поле requestID ID формы</param>
        /// <returns>Объект-оболочка RequestPackage ResponseObjectPackagе, содержащая в поле resultData древовидную структуру формы</returns>
        public ResponseObjectPackage<OpenFormModel> GetFormByID(RequestPackage package)
        {
            int formID = package.requestID;
            OpenFormModel result = new OpenFormModel();
            // форма
            result.form = new DBUtils().RunSqlAction(new FormsRepository().GetFormByID, package).GetDataOrExceptionIfError();
            // все контролы формы
            List<ControlListEntity> controls = new ControlsLogic().GetControlsByFormID(package).GetDataOrExceptionIfError();
            // все свойства формы
            List<ControlPropertyViewModel> properties = new ControlPropertyLogic().GetPropertiesByFormID(package).GetDataOrExceptionIfError();
            // задаем каждому контролу его свойства
            List<OpenControlModel> openControls = new List<OpenControlModel>();
            foreach (ControlListEntity ctrl in controls)
            {
                OpenControlModel o = new OpenControlModel();
                o.control = ctrl;
                // получить для контрола события
                RequestPackage eventRequest = new RequestPackage(){ requestID =ctrl.ID };
                o.events = new DBUtils().RunSqlAction(new EventEditorDataCRUD().GetEventsByControlID, eventRequest).GetDataOrExceptionIfError();
                foreach (ControlPropertyViewModel prop in properties)
                {
                    if (prop.controlID == ctrl.ID)
                    {
                        o.properties.Add(prop);
                        if (prop.property.ToLower() == "name")
                        {
                            o.name = prop.value;
                        }
                    }
                }
                RequestPackage controlPack = new RequestPackage() { requestID = o.control.ID };
                o.data = new DBUtils().RunSqlAction(new QueryEditorDataCRUD().GetQueryDataByControlID, controlPack).GetDataOrExceptionIfError();
                openControls.Add(o);
            }

            // рекурсивная обработка свойств для определения отношений parent-child
            OpenControlModel root = null;
            foreach (OpenControlModel ctrl in openControls)
            {
                if (ctrl.control.controlIDParent == null)
                {
                    root = ctrl;
                }
                else
                {
                    foreach (OpenControlModel subCtrl in openControls)
                    {
                        if (ctrl.control.controlIDParent == subCtrl.control.ID)
                        {
                            subCtrl.items.Add(ctrl);
                        }
                    }
                }
            }

            result.root = root;
            result.queries = new DBUtils().RunSqlAction(new QueryEditorDataCRUD().GetQueriesByFormID, package).GetDataOrExceptionIfError();

            return new ResponseObjectPackage<OpenFormModel>() { resultData = result };
        }