Example #1
0
        protected virtual string GenerateId(string expression)
        {
            var fullName = DefaultHtmlGenerator.GetFullHtmlFieldName(ViewContext, expression: expression);
            var id       = TagBuilder.CreateSanitizedId(fullName, IdAttributeDotReplacement);

            return(id);
        }
Example #2
0
        protected virtual string GenerateValue(string expression, object value, string format, bool useViewData)
        {
            var fullName       = DefaultHtmlGenerator.GetFullHtmlFieldName(ViewContext, expression);
            var attemptedValue =
                (string)DefaultHtmlGenerator.GetModelStateValue(ViewContext, fullName, typeof(string));

            string resolvedValue;

            if (attemptedValue != null)
            {
                // case 1: if ModelState has a value then it's already formatted so ignore format string
                resolvedValue = attemptedValue;
            }
            else if (useViewData)
            {
                // case 2: format the value from ViewData
                resolvedValue = DefaultHtmlGenerator.EvalString(ViewContext, expression, format);
            }
            else
            {
                // case 3: format the explicit value from ModelMetadata
                resolvedValue = FormatValue(value, format);
            }

            return(resolvedValue);
        }
Example #3
0
        private IHtmlHelper <TestModel> MockHtmlHelper()
        {
            IOptions <MvcViewOptions> options  = Substitute.For <IOptions <MvcViewOptions> >();
            IModelMetadataProvider    provider = new EmptyModelMetadataProvider();

            options.Value.Returns(new MvcViewOptions());

            IHtmlGenerator generator = new DefaultHtmlGenerator(
                Substitute.For <IAntiforgery>(),
                options,
                provider,
                Substitute.For <IUrlHelperFactory>(),
                HtmlEncoder.Default,
                new ClientValidatorCache());

            HtmlHelper <TestModel> htmlHelper = new HtmlHelper <TestModel>(
                generator,
                Substitute.For <ICompositeViewEngine>(),
                provider,
                Substitute.For <IViewBufferScope>(),
                HtmlEncoder.Default,
                UrlEncoder.Default,
                new ExpressionTextCache());

            TestModel model = new TestModel();

            model.ParentId = "Model's parent ID";
            ViewContext context = new ViewContext();

            context.ViewData = new ViewDataDictionary <TestModel>(context.ViewData, model);

            htmlHelper.Contextualize(context);

            return(htmlHelper);
        }
Example #4
0
        private static IHtmlContent BooleanTemplateDropDownList(bool?value)
        {
            var selectTag = new TagBuilder("select");

            selectTag.AddCssClass("list-box");
            selectTag.AddCssClass("tri-state");
            selectTag.Attributes["disabled"] = "disabled";

            foreach (var item in TriStateValues(value))
            {
                selectTag.InnerHtml.AppendHtml(DefaultHtmlGenerator.GenerateOption(item, item.Text));
            }

            return(selectTag);
        }
    public static IHtmlGenerator GetHtmlGenerator(IModelMetadataProvider provider, IUrlHelperFactory urlHelperFactory, MvcViewOptions options)
    {
        var optionsAccessor = new Mock <IOptions <MvcViewOptions> >();

        optionsAccessor
        .SetupGet(o => o.Value)
        .Returns(options);

        var attributeProvider = new DefaultValidationHtmlAttributeProvider(
            optionsAccessor.Object,
            provider,
            new ClientValidatorCache());

        var htmlGenerator = new DefaultHtmlGenerator(
            Mock.Of <IAntiforgery>(),
            optionsAccessor.Object,
            provider,
            urlHelperFactory,
            new HtmlTestEncoder(),
            attributeProvider);

        return(htmlGenerator);
    }
        private static HtmlHelper <TModel> GetHtmlHelper <TModel>(
            ViewDataDictionary <TModel> viewData,
            IUrlHelper urlHelper,
            ICompositeViewEngine viewEngine,
            IModelMetadataProvider provider,
            Func <IHtmlHelper, IHtmlHelper> innerHelperWrapper,
            IHtmlGenerator htmlGenerator,
            string idAttributeDotReplacement)
        {
            var httpContext   = new DefaultHttpContext();
            var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor(), viewData.ModelState);

            var options = new MvcViewOptions();

            if (!string.IsNullOrEmpty(idAttributeDotReplacement))
            {
                options.HtmlHelperOptions.IdAttributeDotReplacement = idAttributeDotReplacement;
            }
            var localizationOptionsAccesor = new Mock <IOptions <MvcDataAnnotationsLocalizationOptions> >();

            localizationOptionsAccesor.SetupGet(o => o.Value).Returns(new MvcDataAnnotationsLocalizationOptions());

            options.ClientModelValidatorProviders.Add(new DataAnnotationsClientModelValidatorProvider(
                                                          new ValidationAttributeAdapterProvider(),
                                                          localizationOptionsAccesor.Object,
                                                          stringLocalizerFactory: null));
            var optionsAccessor = new Mock <IOptions <MvcViewOptions> >();

            optionsAccessor
            .SetupGet(o => o.Value)
            .Returns(options);

            var valiatorProviders = new[]
            {
                new DataAnnotationsModelValidatorProvider(
                    new ValidationAttributeAdapterProvider(),
                    new TestOptionsManager <MvcDataAnnotationsLocalizationOptions>(),
                    stringLocalizerFactory: null),
            };

            var validator = new DefaultObjectValidator(provider, valiatorProviders);

            validator.Validate(actionContext, validationState: null, prefix: string.Empty, viewData.Model);

            var urlHelperFactory = new Mock <IUrlHelperFactory>();

            urlHelperFactory
            .Setup(f => f.GetUrlHelper(It.IsAny <ActionContext>()))
            .Returns(urlHelper);

            var expressionTextCache = new ExpressionTextCache();

            var attributeProvider = new DefaultValidationHtmlAttributeProvider(
                optionsAccessor.Object,
                provider,
                new ClientValidatorCache());

            if (htmlGenerator == null)
            {
                htmlGenerator = new DefaultHtmlGenerator(
                    Mock.Of <IAntiforgery>(),
                    optionsAccessor.Object,
                    provider,
                    urlHelperFactory.Object,
                    new HtmlTestEncoder(),
                    attributeProvider);
            }

            // TemplateRenderer will Contextualize this transient service.
            var innerHelper = (IHtmlHelper) new HtmlHelper(
                htmlGenerator,
                viewEngine,
                provider,
                new TestViewBufferScope(),
                new HtmlTestEncoder(),
                UrlEncoder.Default);

            if (innerHelperWrapper != null)
            {
                innerHelper = innerHelperWrapper(innerHelper);
            }

            var serviceCollection = new ServiceCollection();

            serviceCollection
            .AddSingleton(viewEngine)
            .AddSingleton(urlHelperFactory.Object)
            .AddSingleton(Mock.Of <IViewComponentHelper>())
            .AddSingleton(innerHelper)
            .AddSingleton <IViewBufferScope, TestViewBufferScope>()
            .AddSingleton <ValidationHtmlAttributeProvider>(attributeProvider)
            .AddHtmlTags(reg =>
            {
                reg.Editors.IfPropertyIs <DateTimeOffset>().ModifyWith(m =>
                                                                       m.CurrentTag.Attr("type", "datetime-local")
                                                                       .Value(GetDateValue(m.Value <DateTimeOffset?>())));
            });

            var serviceProvider = serviceCollection.BuildServiceProvider();

            httpContext.RequestServices = serviceProvider;

            var htmlHelper = new HtmlHelper <TModel>(
                htmlGenerator,
                viewEngine,
                provider,
                new TestViewBufferScope(),
                new HtmlTestEncoder(),
                UrlEncoder.Default,
                expressionTextCache);

            var viewContext = new ViewContext(
                actionContext,
                Mock.Of <IView>(),
                viewData,
                new TempDataDictionary(
                    httpContext,
                    Mock.Of <ITempDataProvider>()),
                new StringWriter(),
                options.HtmlHelperOptions)
            {
                ClientValidationEnabled = true
            };

            htmlHelper.Contextualize(viewContext);

            return(htmlHelper);
        }
        private static HtmlHelper <TModel> GetHtmlHelper <TModel>(
            ViewDataDictionary <TModel> viewData,
            IUrlHelper urlHelper,
            ICompositeViewEngine viewEngine,
            IModelMetadataProvider provider,
            Func <IHtmlHelper, IHtmlHelper> innerHelperWrapper,
            IHtmlGenerator htmlGenerator,
            string idAttributeDotReplacement)
        {
            var httpContext   = new DefaultHttpContext();
            var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());

            var options = new MvcViewOptions();

            if (!string.IsNullOrEmpty(idAttributeDotReplacement))
            {
                options.HtmlHelperOptions.IdAttributeDotReplacement = idAttributeDotReplacement;
            }
            var localizationOptionsAccesor = new Mock <IOptions <MvcDataAnnotationsLocalizationOptions> >();

            localizationOptionsAccesor.SetupGet(o => o.Value).Returns(new MvcDataAnnotationsLocalizationOptions());

            options.ClientModelValidatorProviders.Add(new DataAnnotationsClientModelValidatorProvider(
                                                          new ValidationAttributeAdapterProvider(),
                                                          localizationOptionsAccesor.Object,
                                                          stringLocalizerFactory: null));
            var optionsAccessor = new Mock <IOptions <MvcViewOptions> >();

            optionsAccessor
            .SetupGet(o => o.Value)
            .Returns(options);

            var urlHelperFactory = new Mock <IUrlHelperFactory>();

            urlHelperFactory
            .Setup(f => f.GetUrlHelper(It.IsAny <ActionContext>()))
            .Returns(urlHelper);

            var expressionTextCache = new ExpressionTextCache();

            if (htmlGenerator == null)
            {
                var attributeProvider = new DefaultValidationHtmlAttributeProvider(
                    optionsAccessor.Object,
                    provider,
                    new ClientValidatorCache());
                htmlGenerator = new DefaultHtmlGenerator(
                    Mock.Of <IAntiforgery>(),
                    optionsAccessor.Object,
                    provider,
                    urlHelperFactory.Object,
                    new HtmlTestEncoder(),
                    attributeProvider);
            }

            // TemplateRenderer will Contextualize this transient service.
            var innerHelper = (IHtmlHelper) new HtmlHelper(
                htmlGenerator,
                viewEngine,
                provider,
                new TestViewBufferScope(),
                new HtmlTestEncoder(),
                UrlEncoder.Default);

            if (innerHelperWrapper != null)
            {
                innerHelper = innerHelperWrapper(innerHelper);
            }

            var serviceProvider = new ServiceCollection()
                                  .AddSingleton(viewEngine)
                                  .AddSingleton(urlHelperFactory.Object)
                                  .AddSingleton(Mock.Of <IViewComponentHelper>())
                                  .AddSingleton(innerHelper)
                                  .AddSingleton <IViewBufferScope, TestViewBufferScope>()
                                  .BuildServiceProvider();

            httpContext.RequestServices = serviceProvider;

            var htmlHelper = new HtmlHelper <TModel>(
                htmlGenerator,
                viewEngine,
                provider,
                new TestViewBufferScope(),
                new HtmlTestEncoder(),
                UrlEncoder.Default,
                expressionTextCache);

            var viewContext = new ViewContext(
                actionContext,
                Mock.Of <IView>(),
                viewData,
                new TempDataDictionary(
                    httpContext,
                    Mock.Of <ITempDataProvider>()),
                new StringWriter(),
                options.HtmlHelperOptions);

            htmlHelper.Contextualize(viewContext);

            return(htmlHelper);
        }
Example #8
0
        protected virtual string GenerateName(string expression)
        {
            var fullName = DefaultHtmlGenerator.GetFullHtmlFieldName(ViewContext, expression);

            return(fullName);
        }
        private IHtmlHelper<TestModel> MockHtmlHelper()
        {
            Mock<IOptions<MvcViewOptions>> optionsMock = new Mock<IOptions<MvcViewOptions>>();
            optionsMock.SetupGet(mock => mock.Value).Returns(new MvcViewOptions());
            IModelMetadataProvider provider = new EmptyModelMetadataProvider();

            IHtmlGenerator generator = new DefaultHtmlGenerator(
                Mock.Of<IAntiforgery>(),
                optionsMock.Object,
                provider,
                Mock.Of<IUrlHelper>(),
                Mock.Of<IHtmlEncoder>());

            HtmlHelper<TestModel> html = new HtmlHelper<TestModel>(
                generator,
                Mock.Of<ICompositeViewEngine>(),
                provider,
                Mock.Of<IHtmlEncoder>(),
                Mock.Of<IUrlEncoder>(),
                Mock.Of<IJavaScriptStringEncoder>());

            ViewContext context = new ViewContext();
            context.ViewData = new ViewDataDictionary<TestModel>(context.ViewData, testModel);

            html.Contextualize(context);

            return html;
        }
        private IHtmlHelper<TestModel> MockHtmlHelper()
        {
            IOptions<MvcViewOptions> options = Substitute.For<IOptions<MvcViewOptions>>();
            IModelMetadataProvider provider = new EmptyModelMetadataProvider();
            options.Value.Returns(new MvcViewOptions());

            IHtmlGenerator generator = new DefaultHtmlGenerator(
                Substitute.For<IAntiforgery>(),
                options,
                provider,
                Substitute.For<IUrlHelperFactory>(),
                HtmlEncoder.Default,
                new ClientValidatorCache());

            HtmlHelper<TestModel> htmlHelper = new HtmlHelper<TestModel>(
                generator,
                Substitute.For<ICompositeViewEngine>(),
                provider,
                Substitute.For<IViewBufferScope>(),
                HtmlEncoder.Default,
                UrlEncoder.Default,
                new ExpressionTextCache());

            TestModel model = new TestModel();
            model.ParentId = "Model's parent ID";
            ViewContext context = new ViewContext();
            context.ViewData = new ViewDataDictionary<TestModel>(context.ViewData, model);

            htmlHelper.Contextualize(context);

            return htmlHelper;
        }