protected ClientBoundUIHintAttribute(DataBindingAttributeDictionary dataBindingAttributeDictionary, DataBindingMode validForModes, string uiHint) : base(uiHint) { if (dataBindingAttributeDictionary == null) { throw new ArgumentNullException("dataBindingAttributeDictionary"); } DataBindingAttributeDictionary = dataBindingAttributeDictionary; _validForModes = validForModes; }
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); }
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); }
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) { }
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; }