Beispiel #1
0
        protected ClientBoundUIHintAttribute(DataBindingAttributeDictionary dataBindingAttributeDictionary, DataBindingMode validForModes, string uiHint)
            : base(uiHint)
        {
            if (dataBindingAttributeDictionary == null)
            {
                throw new ArgumentNullException("dataBindingAttributeDictionary");
            }
            DataBindingAttributeDictionary = dataBindingAttributeDictionary;

            _validForModes = validForModes;
        }
Beispiel #2
0
        public override DataBindingAttributeDictionary ApplyExtension(DataBindingAttributeDictionary bindings, DataBindingMode currentMode)
        {
            if (!_validForModes.HasFlag(currentMode) || !bindings.Any(b => b.Key == _attributeName))
            {
                return(bindings);
            }
            var valueBinding         = bindings.First(b => b.Key == _attributeName);
            var extendedValueBinding = BuildExtensionString(valueBinding.Value.ToString());

            bindings.SetAttribute(valueBinding.Key, extendedValueBinding);
            return(bindings);
        }
        /// <summary>
        /// Constructs a DataBindingAttributeDictionary consisting of all data binding attributes for supplied expression.
        /// </summary>
        /// <typeparam name="TModel"></typeparam>
        /// <typeparam name="TValue"></typeparam>
        /// <param name="expression">An expression indicating the property for which the build the DataBindingAttributeDictionary.</param>
        /// <param name="viewData"></param>
        /// <param name="mode"></param>
        /// <param name="bindingLevel"></param>
        /// <returns></returns>
        public DataBindingAttributeDictionary BuildDataBindingAttributesFor <TModel, TValue>(Expression <Func <TModel, TValue> > expression, ViewDataDictionary <TModel> viewData, DataBindingMode mode, ClientBindingLevel bindingLevel)
        {
            var dataBindingAttributes = new DataBindingAttributeDictionary();

            var dataBindingInfoFactory = new DataBindingInfoFactory();
            var bindingInfo            = dataBindingInfoFactory.CreateDataBindingAttributeInfoFor(expression, mode, bindingLevel);

            dataBindingAttributes.MergeAttribute(bindingInfo);

            //GetClientSideDataBindingAttributesFor(dataBindingAttributes, expression, mode);
            GetClientSideDataBindingAttributesFor(dataBindingAttributes, expression, mode);
            //dataBindingAttributes.MergeAttributes(clientSideDataBindingAttributes);

            return(dataBindingAttributes);
        }
Beispiel #4
0
        private static DataBindingAttributeDictionary BuildDataBindingAttributeDictionary(string attributes)
        {
            if (attributes == null)
            {
                throw new ArgumentNullException("attributes");
            }

            var dictionary = new DataBindingAttributeDictionary();

            foreach (var a in attributes.Split(','))
            {
                var attr = a.Split(':');
                dictionary.SetAttribute(attr[0], attr[1]);
            }
            return(dictionary);
        }
Beispiel #5
0
        private static DataBindingAttributeDictionary BuildDataBindingAttributeDictionary(string attributeName, string attributeValue)
        {
            if (string.IsNullOrWhiteSpace(attributeName))
            {
                throw new ArgumentNullException("attributeName");
            }
            if (string.IsNullOrWhiteSpace(attributeValue))
            {
                throw new ArgumentNullException("attributeValue");
            }

            var dictionary = new DataBindingAttributeDictionary();

            dictionary.SetAttribute(attributeName, attributeValue);

            return(dictionary);
        }
        private static DataBindingAttributeDictionary BuildDataBindingAttributeDictionary(string dataSourceName, string valuePropertyName, ClientBindingLevel bindingLevel, string displayPropertyName, string optionsCaption)
        {
            if (dataSourceName == null) { throw new ArgumentNullException("dataSourceName"); }
            if (string.IsNullOrWhiteSpace(dataSourceName)) { throw new ArgumentException("Data source name cannot be empty.", "dataSourceName"); }

            if (displayPropertyName == null) { throw new ArgumentNullException("displayPropertyName"); }
            if (string.IsNullOrWhiteSpace(displayPropertyName)) { throw new ArgumentException("Display property name cannot be empty.", "displayPropertyName"); }

            var dataBindingAttributeDictionary = new DataBindingAttributeDictionary();
            dataBindingAttributeDictionary.SetAttribute("options", string.Format("{0}.{1}", GetBindingScope(bindingLevel), dataSourceName));
            dataBindingAttributeDictionary.SetAttribute("optionsText", string.Format("'{0}'", displayPropertyName));

            if (!string.IsNullOrWhiteSpace(valuePropertyName))
            {
                dataBindingAttributeDictionary.SetAttribute("optionsValue", string.Format("'{0}'", valuePropertyName));
            }

            if (!string.IsNullOrEmpty(optionsCaption))
            {
                dataBindingAttributeDictionary.SetAttribute("optionsCaption", string.Format("'{0}'", optionsCaption));
            }

            return dataBindingAttributeDictionary;
        }
 private ClientBoundSelectListAttribute(DataBindingAttributeDictionary dataBindingAttributeDictionary, string templateName)
     : base(dataBindingAttributeDictionary, DataBindingMode.Editable | DataBindingMode.Readonly, templateName)
 {
 }
Beispiel #8
0
 public abstract DataBindingAttributeDictionary ApplyExtension(DataBindingAttributeDictionary bindings, DataBindingMode currentMode);
        private static DataBindingAttributeDictionary GetClientSideDataBindingAttributesFor <TModel, TValue>(DataBindingAttributeDictionary dataBindingAttributes, Expression <Func <TModel, TValue> > expression, DataBindingMode mode)
        {
            if (dataBindingAttributes == null)
            {
                throw new ArgumentNullException("dataBindingAttributes");
            }
            //var dataBindingAttributes = new DataBindingAttributeDictionary();

            if (expression.Body.NodeType == ExpressionType.MemberAccess)
            {
                var member = ((MemberExpression)expression.Body).Member;
                if (member.MemberType != MemberTypes.Property)
                {
                    throw new NotSupportedException("The expression's return type must be a Property type.");
                }

                foreach (var bindingAttribute in member.GetCustomAttributes <ClientBoundUIHintAttribute>().Where(a => a.IsValidForMode(mode)))
                {
                    if (!bindingAttribute.IsValidForProperty(member))
                    {
                        throw new ArgumentException(
                                  String.Format(
                                      "The ClientBoundUIHintAttribute, '{0}' does not support binding to the property '{1}' which is of type '{2}' and is a member of '{3}.",
                                      bindingAttribute.GetType().FullName,
                                      member.Name,
                                      member.ReflectedType.FullName,
                                      typeof(TModel).FullName));
                    }

                    dataBindingAttributes.MergeAttributes(bindingAttribute.GetDatabindingAttributes());
                }

                ApplyDataBindingExtensions(member, dataBindingAttributes, mode);
            }

            return(dataBindingAttributes);
        }
        //todo: write tests for public methods

        public void StoreDataBindingAttributesFor(string propertyName, ViewDataDictionary viewData, DataBindingAttributeDictionary attributes)
        {
            var dataBindingAttributes = GetDataBindingAttributesForCurrentContext(viewData);

            dataBindingAttributes.MergeAttributes(attributes);
        }
        private static DataBindingAttributeDictionary ApplyDataBindingExtensions(MemberInfo property, DataBindingAttributeDictionary dataBindingAttributes, DataBindingMode mode)
        {
            foreach (var extensionAttribute in property.GetCustomAttributes <ClientBoundExtensionAttribute>())
            {
                extensionAttribute.ApplyExtension(dataBindingAttributes, mode);
            }

            return(dataBindingAttributes);
        }
 public KnockoutDataBindingObject(DataBindingAttributeDictionary dataBindingAttributes, object additionalViewData)
 {
     DataBindingAttributes = dataBindingAttributes;
     AdditionalViewData    = additionalViewData;
 }