如果着陆页有 slug,则使来自该着陆页的链接包含 slug

if landing page has slug, make links from that landing page contain slug

我正在使用 slugs 为用户更改登录页面的主题。如果他们在 URL 后附加了 slug 的登录页面开始他们的旅程,我想确保该页面上的所有 link 都将转到它们的 slug 等价物。

这是我的路由配置:

public static void RegisterRoutes(RouteCollection routes)
        {
        
            routes.MapRoute(
                name: "SignUpJourney",
                url: "SignUp/{signUpJourney}/{slug}/{action}",
                defaults: new { controller = SignUpController.ControllerName, action = SignUpController.IndexAction, slug = UrlParameter.Optional, signUpJourney = UrlParameter.Optional },
                namespaces: new[] { "MyApp.Controllers" },
            );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{slug}",
                defaults: new { controller = HomeController.ControllerName, action = HomeController.IndexAction, slug= UrlParameter.Optional },
                namespaces: new[] { "MyApp.Controllers" }
            );
        }

当我在 URL 末尾手动输入别名时,页面会根据别名将我带到正确的主题登录页面,但该页面上的 links (例如 Login) link 将我路由回默认的、无样式的登录页面。 MVC 中有没有一种方法可以将 slug 添加到任何 links,这些 links 是从有 slug 的旅程开始的?我正在努力寻找关于此的文章 and/or 最佳实践,但我对 asp.net-mvc 也相当陌生。

谢谢

您可以检查当前请求是否包含给定的 slug,然后根据该请求设置所需的 URL。

if (Context.Request.QueryString.Value.Contains("your-slug"))
{
        @Html.ActionLink("Link Test", "ActionName", "ControllerName", new { slug = 'your-slug' })
} else 
{
    @Html.ActionLink("Link Test", "ActionName", "ControllerName")
}