You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,168 @@
|
||||
namespace System.Web.ModelBinding {
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
|
||||
public class ModelBindingContext {
|
||||
|
||||
private ModelBinderProviderCollection _modelBinderProviders;
|
||||
private ModelMetadata _modelMetadata;
|
||||
private string _modelName;
|
||||
private ModelStateDictionary _modelState;
|
||||
private Dictionary<string, ModelMetadata> _propertyMetadata;
|
||||
private ModelValidationNode _validationNode;
|
||||
private IValueProvider _valueProvider;
|
||||
|
||||
public ModelBindingContext()
|
||||
: this(null) {
|
||||
ValidateRequest = true;
|
||||
}
|
||||
|
||||
// copies certain values that won't change between parent and child objects,
|
||||
// e.g. ValueProvider, ModelState
|
||||
public ModelBindingContext(ModelBindingContext bindingContext) {
|
||||
if (bindingContext != null) {
|
||||
ModelBinderProviders = bindingContext.ModelBinderProviders;
|
||||
ModelState = bindingContext.ModelState;
|
||||
ValueProvider = bindingContext.ValueProvider;
|
||||
ValidateRequest = bindingContext.ValidateRequest;
|
||||
}
|
||||
}
|
||||
|
||||
public object Model {
|
||||
get {
|
||||
EnsureModelMetadata();
|
||||
return ModelMetadata.Model;
|
||||
}
|
||||
set {
|
||||
EnsureModelMetadata();
|
||||
ModelMetadata.Model = value;
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "This is writeable to support unit testing")]
|
||||
public ModelBinderProviderCollection ModelBinderProviders {
|
||||
get {
|
||||
if (_modelBinderProviders == null) {
|
||||
_modelBinderProviders = System.Web.ModelBinding.ModelBinderProviders.Providers;
|
||||
}
|
||||
return _modelBinderProviders;
|
||||
}
|
||||
set {
|
||||
_modelBinderProviders = value;
|
||||
}
|
||||
}
|
||||
|
||||
public ModelMetadata ModelMetadata {
|
||||
get {
|
||||
return _modelMetadata;
|
||||
}
|
||||
set {
|
||||
_modelMetadata = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string ModelName {
|
||||
get {
|
||||
if (_modelName == null) {
|
||||
_modelName = String.Empty;
|
||||
}
|
||||
return _modelName;
|
||||
}
|
||||
set {
|
||||
_modelName = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool ValidateRequest {
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "This is writeable to support unit testing")]
|
||||
public ModelStateDictionary ModelState {
|
||||
get {
|
||||
if (_modelState == null) {
|
||||
_modelState = new ModelStateDictionary();
|
||||
}
|
||||
return _modelState;
|
||||
}
|
||||
set {
|
||||
_modelState = value;
|
||||
}
|
||||
}
|
||||
|
||||
public Type ModelType {
|
||||
get {
|
||||
EnsureModelMetadata();
|
||||
return ModelMetadata.ModelType;
|
||||
}
|
||||
}
|
||||
|
||||
public IDictionary<string, ModelMetadata> PropertyMetadata {
|
||||
get {
|
||||
if (_propertyMetadata == null) {
|
||||
_propertyMetadata = ModelMetadata.Properties.ToDictionary(m => m.PropertyName, StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
return _propertyMetadata;
|
||||
}
|
||||
}
|
||||
|
||||
public ModelValidationNode ValidationNode {
|
||||
get {
|
||||
if (_validationNode == null) {
|
||||
_validationNode = new ModelValidationNode(ModelMetadata, ModelName);
|
||||
}
|
||||
return _validationNode;
|
||||
}
|
||||
set {
|
||||
_validationNode = value;
|
||||
}
|
||||
}
|
||||
|
||||
public IValueProvider ValueProvider {
|
||||
get {
|
||||
return _valueProvider;
|
||||
}
|
||||
set {
|
||||
_valueProvider = value;
|
||||
}
|
||||
}
|
||||
|
||||
internal IUnvalidatedValueProvider UnvalidatedValueProvider {
|
||||
get {
|
||||
return (ValueProvider as IUnvalidatedValueProvider ?? new UnvalidatedValueProviderWrapper(ValueProvider));
|
||||
}
|
||||
}
|
||||
|
||||
private void EnsureModelMetadata() {
|
||||
if (ModelMetadata == null) {
|
||||
throw Error.ModelBindingContext_ModelMetadataMustBeSet();
|
||||
}
|
||||
}
|
||||
|
||||
// Used to wrap an IValueProvider in an IUnvalidatedValueProvider
|
||||
private sealed class UnvalidatedValueProviderWrapper : IValueProvider, IUnvalidatedValueProvider {
|
||||
private readonly IValueProvider _backingProvider;
|
||||
|
||||
public UnvalidatedValueProviderWrapper(IValueProvider backingProvider) {
|
||||
_backingProvider = backingProvider;
|
||||
}
|
||||
|
||||
public ValueProviderResult GetValue(string key, bool skipValidation) {
|
||||
// 'skipValidation' isn't understood by the backing provider and can be ignored
|
||||
return GetValue(key);
|
||||
}
|
||||
|
||||
public bool ContainsPrefix(string prefix) {
|
||||
return _backingProvider.ContainsPrefix(prefix);
|
||||
}
|
||||
|
||||
public ValueProviderResult GetValue(string key) {
|
||||
return _backingProvider.GetValue(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user