// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; using System.Globalization; using Microsoft.AspNet.Http; namespace Microsoft.AspNet.Mvc.ModelBinding { /// /// An adapter for data stored in an . /// public class FormValueProvider : BindingSourceValueProvider, IEnumerableValueProvider { private readonly CultureInfo _culture; private PrefixContainer _prefixContainer; private IFormCollection _values; /// /// Creates a value provider for . /// /// The for the data. /// The key value pairs to wrap. /// The culture to return with ValueProviderResult instances. public FormValueProvider( BindingSource bindingSource, IFormCollection values, CultureInfo culture) : base(bindingSource) { if (bindingSource == null) { throw new ArgumentNullException(nameof(bindingSource)); } if (values == null) { throw new ArgumentNullException(nameof(values)); } _values = values; _culture = culture; } public CultureInfo Culture { get { return _culture; } } protected PrefixContainer PrefixContainer { get { if (_prefixContainer == null) { _prefixContainer = new PrefixContainer(_values.Keys); } return _prefixContainer; } } /// public override bool ContainsPrefix(string prefix) { return PrefixContainer.ContainsPrefix(prefix); } /// public virtual IDictionary GetKeysFromPrefix(string prefix) { if (prefix == null) { throw new ArgumentNullException(nameof(prefix)); } return PrefixContainer.GetKeysFromPrefix(prefix); } /// public override ValueProviderResult GetValue(string key) { if (key == null) { throw new ArgumentNullException(nameof(key)); } var values = _values[key]; if (values.Count == 0) { return ValueProviderResult.None; } else { return new ValueProviderResult(values, _culture); } } } }