public void LocalizablePresenter_RedirectsOnInvalidLanguageCode() { var config = DotvvmConfiguration.CreateDefault(); var presenterFactory = LocalizablePresenter.BasedOnParameter("Lang"); config.RouteTable.Add("Test", "test/Lang", "test", new { Lang = "en" }, presenterFactory); var context = DotvvmTestHelper.CreateContext(config); context.Parameters["Lang"] = "cz"; context.Route = config.RouteTable.First(); var httpRequest = new TestHttpContext(); httpRequest.Request = new TestHttpRequest(httpRequest) { PathBase = "" }; httpRequest.Request.Headers.Add(HostingConstants.SpaContentPlaceHolderHeaderName, new string[0]); context.HttpContext = httpRequest; var localizablePresenter = presenterFactory(config.ServiceProvider); Assert.ThrowsException <DotvvmInterruptRequestExecutionException>(() => localizablePresenter.ProcessRequest(context)); }
protected override void OnInit(IDotvvmRequestContext context) { var controlBuilderFactory = context.Configuration.ServiceProvider.GetService <IControlBuilderFactory>(); if (DataContext is CodeStepBase <IDotHtmlCodeValidationObject> || DataContext is CodeStepBase <ICSharpCodeValidationObject> ) { var builder = controlBuilderFactory.GetControlBuilder("Controls/CodeEditorButtons.dotcontrol"); var control = builder.builder.Value.BuildControl(controlBuilderFactory, context.Services); control.SetValue(Internal.UniqueIDProperty, "c1"); Children.Add(control); } LocalizablePresenter.BasedOnParameter("Lang"); base.OnInit(context); }
public void SerializeRoutes() { var c = new DotvvmConfiguration(); c.RouteTable.Add("route1", "url1", "file1.dothtml", new { a = "ccc" }); c.RouteTable.Add("route2", "url2/{int}", "file1.dothtml", new { a = "ccc" }); c.RouteTable.Add("custom presenter", "url3", "", presenterFactory: LocalizablePresenter.BasedOnQuery("lang")); c.RouteTable.AddGroup("group1", "group-{lang}/", "", rg => { rg.Add("r1", "r1", "g-r1.dothtml"); rg.AddGroup("g", "g/", "", rg => { rg.Add("r2", "r2", "g-g-r2.dothtml"); }); }, presenterFactory: LocalizablePresenter.BasedOnParameter("lang")); checkConfig(c); }
private static void AddRoutes(DotvvmConfiguration config) { config.RouteTable.Add("Default", "", "Views/Default.dothtml"); config.RouteTable.Add("ComplexSamples_SPARedirect_home", "ComplexSamples/SPARedirect", "Views/ComplexSamples/SPARedirect/home.dothtml"); config.RouteTable.Add("ControlSamples_SpaContentPlaceHolder_PageA", "ControlSamples/SpaContentPlaceHolder/PageA/{Id}", "Views/ControlSamples/SpaContentPlaceHolder/PageA.dothtml", new { Id = 0 }); config.RouteTable.Add("ControlSamples_SpaContentPlaceHolder_PrefixRouteName_PageA", "ControlSamples/SpaContentPlaceHolder_PrefixRouteName/PageA/{Id}", "Views/ControlSamples/SpaContentPlaceHolder_PrefixRouteName/PageA.dothtml", new { Id = 0 }); config.RouteTable.Add("ControlSamples_SpaContentPlaceHolder_HistoryApi_PageA", "ControlSamples/SpaContentPlaceHolder_HistoryApi/PageA/{Id}", "Views/ControlSamples/SpaContentPlaceHolder_HistoryApi/PageA.dothtml", new { Id = 0 }); config.RouteTable.Add("ControlSamples_SpaContentPlaceHolder_HistoryApi", "ControlSamples/SpaContentPlaceHolder_HistoryApi", "Views/ControlSamples/SpaContentPlaceHolder_HistoryApi/SpaMaster.dotmaster"); config.RouteTable.Add("FeatureSamples_ParameterBinding_ParameterBinding", "FeatureSamples/ParameterBinding/ParameterBinding/{A}", "Views/FeatureSamples/ParameterBinding/ParameterBinding.dothtml", new { A = 123 }); config.RouteTable.Add("FeatureSamples-Localization", "FeatureSamples/Localization", "Views/FeatureSamples/Localization/Localization.dothtml", presenterFactory: LocalizablePresenter.BasedOnQuery("lang")); config.RouteTable.Add("FeatureSamples-Localization-Localization_NestedPage_Type", "FeatureSamples/Localization/Localization_NestedPage_Type", "Views/FeatureSamples/Localization/Localization_NestedPage_Type.dothtml", presenterFactory: LocalizablePresenter.BasedOnQuery("lang")); config.RouteTable.Add("FeatureSamples_ParameterBinding_OptionalParameterBinding", "FeatureSamples/ParameterBinding/OptionalParameterBinding/{Id?}", "Views/FeatureSamples/ParameterBinding/OptionalParameterBinding.dothtml"); config.RouteTable.Add("FeatureSamples_ParameterBinding_OptionalParameterBinding2", "FeatureSamples/ParameterBinding/OptionalParameterBinding2/{Id?}", "Views/FeatureSamples/ParameterBinding/OptionalParameterBinding.dothtml", new { Id = 300 }); config.RouteTable.AutoDiscoverRoutes(new DefaultRouteStrategy(config)); config.RouteTable.Add("RepeaterRouteLink-PageDetail", "ControlSamples/Repeater/RouteLink/{Id}", "Views/ControlSamples/Repeater/RouteLink.dothtml", new { Id = 0 }); config.RouteTable.Add("RepeaterRouteLink-PageDetail_IdOptional", "ControlSamples/Repeater/RouteLink/{Id?}", "Views/ControlSamples/Repeater/RouteLink.dothtml"); config.RouteTable.Add("RepeaterRouteLink-PageDetail_IdOptionalPrefixed", "ControlSamples/Repeater/RouteLink/id-{Id?}", "Views/ControlSamples/Repeater/RouteLink.dothtml"); config.RouteTable.Add("RepeaterRouteLink-PageDetail_IdOptionalAtStart", "id-{Id?}/ControlSamples/Repeater/RouteLink", "Views/ControlSamples/Repeater/RouteLink.dothtml"); config.RouteTable.Add("RepeaterRouteLinkUrlSuffix-PageDetail", "ControlSamples/Repeater/RouteLinkUrlSuffix/{Id}", "Views/ControlSamples/Repeater/RouteLink.dothtml", new { Id = 0 }); config.RouteTable.Add("FeatureSamples_Redirect_RedirectFromPresenter", "FeatureSamples/Redirect/RedirectFromPresenter", provider => new RedirectingPresenter()); config.RouteTable.Add("FeatureSamples_Validation_ClientSideValidationDisabling2", "FeatureSamples/Validation/ClientSideValidationDisabling/{ClientSideValidationEnabled}", "Views/FeatureSamples/Validation/ClientSideValidationDisabling.dothtml", new { ClientSideValidationEnabled = false }); config.RouteTable.Add("FeatureSamples_EmbeddedResourceControls_EmbeddedResourceView", "FeatureSamples/EmbeddedResourceControls/EmbeddedResourceView", "embedded://EmbeddedResourceControls/EmbeddedResourceView.dothtml"); config.RouteTable.Add("FeatureSamples_PostBack_PostBackHandlers_Localization", "FeatureSamples/PostBack/PostBackHandlers_Localized", "Views/FeatureSamples/PostBack/ConfirmPostBackHandler.dothtml", LocalizablePresenter.BasedOnQuery("lang")); config.RouteTable.Add("Errors_Routing_NonExistingView", "Errors/Routing/NonExistingView", "Views/Errors/Routing/NonExistingView.dothml"); }
public static Func <IServiceProvider, IAmpPresenter> BasedOnParameterWithAmp(string name, bool redirectWhenNotFound = true) { DotvvmAmpLocalizablePresenter presenter = new DotvvmAmpLocalizablePresenter(redirectWhenNotFound ? LocalizablePresenter.WithRedirectOnFailure(new Action <IDotvvmRequestContext>(redirect), new Func <IDotvvmRequestContext, CultureInfo>(getCulture)) : new Func <IDotvvmRequestContext, CultureInfo>(getCulture), (Func <IDotvvmRequestContext, Task>)(context => context.Services.GetRequiredService <IAmpPresenter>().ProcessRequest(context))); return(_ => presenter); void redirect(IDotvvmRequestContext context) { Dictionary <string, object> dictionary = context.Parameters.ToDictionary <KeyValuePair <string, object>, string, object>((Func <KeyValuePair <string, object>, string>)(e => e.Key), (Func <KeyValuePair <string, object>, object>)(e => e.Value)); if (context.Configuration.DefaultCulture.Equals(dictionary[name])) { throw new Exception("The specified default culture is probably invalid"); } dictionary[name] = (object)context.Configuration.DefaultCulture; context.RedirectToRoute(context.Route.RouteName, (object)dictionary, false, true, (string)null, (object)context.HttpContext.Request.Query); } CultureInfo getCulture(IDotvvmRequestContext context) { object obj; return(!context.Parameters.TryGetValue(name, out obj) || string.IsNullOrEmpty(obj as string) ? (CultureInfo)null : CultureInfo.GetCultureInfo((string)obj)); } }
private void ConfigureRoutes(DotvvmConfiguration config, string applicationPath) { config.RouteTable.Add("Lesson", "{Lang}/lesson{Lesson}/step{Step}", "Views/lesson.dothtml", new { Lang = "en" }, presenterFactory: LocalizablePresenter.BasedOnParameter("Lang")); config.RouteTable.Add("Default", "{Lang:alpha}", "Views/default.dothtml", new { Lang = "en" }, presenterFactory: LocalizablePresenter.BasedOnParameter("Lang")); // Uncomment the following line to auto-register all dothtml files in the Views folder // config.RouteTable.AutoDiscoverRoutes(new DefaultRouteStrategy(config)); }