protected virtual string GenerateId(string expression) { var fullName = DefaultHtmlGenerator.GetFullHtmlFieldName(ViewContext, expression: expression); var id = TagBuilder.CreateSanitizedId(fullName, IdAttributeDotReplacement); return(id); }
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); }
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); }
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); }
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; }