Esempio n. 1
0
        /// <summary>
        /// Create a Binder
        /// </summary>
        /// <remarks>
        /// Specifying which binder to use can be acheived by placing a BindingOptionsControl on the page or
        /// using the BindingStateMode config key. BindingOptionsControl takes precedence. A default ViewStateBinder
        /// is used in the absence of the above.
        /// </remarks>
        /// <param name="bindingContainer"></param>
        /// <returns></returns>
        public static BinderBase CreateBinder(IBindingContainer bindingContainer)
        {
            //Create a binder based on:
            //A) The binder specified by a binding options control
            BinderBase binder = null;

            if (!TryGetBinderFromOptionsControl(bindingContainer, out binder))
            {
                //B) The binder specified in the config
                if (!TryGetBinderFromConfig(bindingContainer, out binder))
                {
                    //C) the default binder is created.
                    binder = CreateBinder(bindingContainer, DEFAULT_STATE_MODE);
                }
            }

            //Set the update source trigger on:
            UpdateSourceTrigger updateSourceTrigger = UpdateSourceTrigger.PostBack;

            //A) The updateSourceTrigger specified by a binding options control
            if (!TryGetUpdateSourceTriggerOptionsControl(bindingContainer, out updateSourceTrigger))
            {
                //B) The updateSourceTrigger specified in the config
                TryGetUpdateSourceTriggerFromConfig(bindingContainer, out updateSourceTrigger);
            }

            binder.UpdateSourceTrigger = updateSourceTrigger;

            return(binder);
        }
Esempio n. 2
0
        /// <summary>
        /// Bind to a command
        /// </summary>
        /// <remarks>
        /// Binding via an options object is supported to allow for a more natural syntax between data and command bindings
        /// </remarks>
        /// <param name="control"></param>
        /// <param name="bindingOptions">Options for binding. Only the Path property is utilised for command bindings.
        /// </param>
        public static string BindCommand(this object control, Options bindingOptions)
        {
            Control           ctrl             = control as Control;
            IBindingContainer bindingContainer = ctrl.Page as IBindingContainer;
            BinderBase        binder           = CreateBinder(bindingContainer);

            binder.ExecuteCommandBind(new WebformControl(ctrl), bindingOptions);

            return("return true");
        }
Esempio n. 3
0
        /// <summary>
        /// Create a binder and explicitly specify the StateMode
        /// </summary>
        /// <param name="bindingContainer"></param>
        /// <param name="stateMode"></param>
        /// <returns></returns>
        public static BinderBase CreateBinder(IBindingContainer bindingContainer, StateMode stateMode)
        {
            BinderBase          binder             = null;
            IDataStorageService dataStorageService = GetDataStorageService(bindingContainer);

            if (stateMode == StateMode.Recreate)
            {
                binder = new StatelessBinder(bindingContainer, dataStorageService, new WebformsControlService());
            }
            else
            {
                binder = new ViewStateBinder(bindingContainer, new ViewStateStorageService(bindingContainer.GetStateBag()), new WebformsControlService());
            }

            return(binder);
        }
Esempio n. 4
0
        /// <summary>
        /// Bind and specify options for the bind.
        /// </summary>
        /// <param name="control"></param>
        /// <param name="bindingOptions"></param>
        /// <returns></returns>
        public static object Bind(object control, Options bindingOptions, string propertyName)
        {
            Control        ctrl           = control as Control;
            WebformControl wrappedControl = new WebformControl(ctrl);

            IBindingContainer bindingContainer = ctrl.Page as IBindingContainer;
            BinderBase        binder           = CreateBinder(bindingContainer);

            object bindingResult = null;

            if (ctrl != null && bindingContainer != null)
            {
                IDataItemContainer dataItemContainer = ctrl.NamingContainer as IDataItemContainer;

                if (dataItemContainer != null)
                {
                    WebformControl <IDataItemContainer> wrappedContainer = new WebformControl <IDataItemContainer>((Control)dataItemContainer);

                    if (string.IsNullOrEmpty(propertyName))
                    {
                        bindingResult = binder.ExecuteBind(wrappedControl, wrappedContainer, bindingOptions);
                    }
                    else
                    {
                        bindingResult = binder.ExecuteBind(wrappedControl, wrappedContainer, bindingOptions, propertyName);
                    }
                }
                else
                {
                    if (string.IsNullOrEmpty(propertyName))
                    {
                        bindingResult = binder.ExecuteBind(wrappedControl, bindingOptions);
                    }
                    else
                    {
                        bindingResult = binder.ExecuteBind(wrappedControl, bindingOptions, propertyName);
                    }
                }
            }

            return(bindingResult);
        }
Esempio n. 5
0
        /// <summary>
        /// Call this to initiate Unbind
        /// </summary>
        /// <remarks>
        /// Only required if UpdateSourceTrigger is Explicit.
        /// DO NOT CALL BEFORE LOAD in the PLC
        /// </remarks>
        /// <param name="bindingContainer"></param>
        public static void Unbind(this IBindingContainer bindingContainer)
        {
            BinderBase binder = BindingHelpers.CreateBinder(bindingContainer);

            binder.ExecuteUnbind();
        }
Esempio n. 6
0
 public static void RegisterForBinding(this IBindingContainer bindingContainer)
 {
     BinderBase binder = BindingHelpers.CreateBinder(bindingContainer);
 }
Esempio n. 7
0
        private static bool TryGetBinderFromOptionsControl(IBindingContainer bindingContainer, out BinderBase binder)
        {
            bool result = false;

            binder = null;

            BindingOptionsControl bindingOptionsControl = null;

            if (TryGetBindingOptionsControl(bindingContainer, out bindingOptionsControl))
            {
                binder = CreateBinder(bindingContainer, bindingOptionsControl.StateMode);
                result = true;
            }

            return(result);
        }
Esempio n. 8
0
        private static bool TryGetBinderFromConfig(IBindingContainer bindingContainer, out BinderBase binder)
        {
            bool result = false;

            binder = null;
            string stateModeStr = WebConfigurationManager.AppSettings[STATE_MODE_KEY];

            if (!string.IsNullOrEmpty(stateModeStr))
            {
                StateMode stateModeEnum = StateMode.Persist;
                if (stateModeEnum.TryParse(stateModeStr))
                {
                    binder = CreateBinder(bindingContainer, stateModeEnum);
                    result = true;
                }
            }

            return(result);
        }