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);
        }
示例#3
0
        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);
        }
示例#4
0
        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));
            }
        }
示例#6
0
        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));
        }