MvcContrib.Binders.TypeStampOperator.DetectTypeStamp C# (CSharp) Method

DetectTypeStamp() public method

public DetectTypeStamp ( System.Web.Mvc.ModelBindingContext bindingContext, IPropertyNameProvider propertyNameProvider ) : string
bindingContext System.Web.Mvc.ModelBindingContext
propertyNameProvider IPropertyNameProvider
return string
        public string DetectTypeStamp(ModelBindingContext bindingContext, IPropertyNameProvider propertyNameProvider)
        {
            var propertyName = propertyNameProvider.CreatePropertyName(bindingContext.ModelName, DerivedTypeModelBinderCache.TypeStampFieldName);

            if (bindingContext.ValueProvider.ContainsPrefix(propertyName))
            {
                var value = bindingContext.ValueProvider.GetValue(propertyName);
                if (value.RawValue is String[])
                    return (value.RawValue as String[])[0];

                throw new InvalidOperationException(
                    string.Format("TypeStamp found for type {0} on path {1}, but format is invalid.",
                                  bindingContext.ModelType.Name, propertyName));
            }

            return string.Empty;
        }

Usage Example

        public void TypeStampIsFoundOnPageTest()
        {
            var valueProvider = MockRepository.GenerateMock<IValueProvider>();
            var propertyNameProvider = MockRepository.GenerateMock<IPropertyNameProvider>();

            propertyNameProvider.Expect(e => e.CreatePropertyName("test", DerivedTypeModelBinderCache.TypeStampFieldName)).Return("foo");
            valueProvider.Expect(b => b.ContainsPrefix("foo"))
                .Return(true);
            valueProvider.Expect(e => e.GetValue("foo")).Return(new ValueProviderResult(new[] { "bar" }, "foo",
                                                                                        CultureInfo.InvariantCulture));

            var typeStampOperator = new TypeStampOperator();

            Assert.That(typeStampOperator.DetectTypeStamp(
                new ModelBindingContext
                {
                    ModelMetadata =
                        new ModelMetadata(new EmptyModelMetadataProvider(), typeof(DerivedTypeModelBinder),
                                          null, typeof(DerivedTypeModelBinderTests), "propertyName"
                        ),
                    ModelName = "test",
                    ValueProvider = valueProvider
                }, propertyNameProvider), Is.EqualTo("bar"));
        }
All Usage Examples Of MvcContrib.Binders.TypeStampOperator::DetectTypeStamp
TypeStampOperator