namespace System.Web.ModelBinding { using System; using System.Collections.Generic; using System.Globalization; public class DictionaryValueProvider : IValueProvider { private readonly PrefixContainer _prefixes; private readonly Dictionary _values = new Dictionary(StringComparer.OrdinalIgnoreCase); public DictionaryValueProvider(IDictionary dictionary, CultureInfo culture) { if (dictionary == null) { throw new ArgumentNullException("dictionary"); } _prefixes = new PrefixContainer(dictionary.Keys); AddValues(dictionary, culture); } private void AddValues(IDictionary dictionary, CultureInfo culture) { foreach (var entry in dictionary) { object rawValue = entry.Value; string attemptedValue = Convert.ToString(rawValue, culture); _values[entry.Key] = new ValueProviderResult(rawValue, attemptedValue, culture); } } public virtual bool ContainsPrefix(string prefix) { if (prefix == null) { throw new ArgumentNullException("prefix"); } return _prefixes.ContainsPrefix(prefix); } public virtual ValueProviderResult GetValue(string key) { if (key == null) { throw new ArgumentNullException("key"); } ValueProviderResult vpResult; _values.TryGetValue(key, out vpResult); return vpResult; } } }