/// <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); }
/// <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"); }
/// <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); }
/// <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); }
/// <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(); }
public static void RegisterForBinding(this IBindingContainer bindingContainer) { BinderBase binder = BindingHelpers.CreateBinder(bindingContainer); }
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); }
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); }