用于更改StyleSheet的MVC URL / Route

时间:2015-02-23 14:33:57

标签: css .net asp.net-mvc url routes

我有一个我为多个客户创建的应用程序。客户之间的唯一区别是stlye表和一些图形。我想让每个客户端只使用一个不同的URL,它将显示具有不同css的核心内容,如下所示:

所有MyApplication /客户端1 / myController的/ myaction
所有MyApplication /客户端2 / myController的/ myaction

有人可以给我一些关于如何在.NET MVC 4中完成的指示吗?

附加信息:
我只部署了这个应用程序的单个实例。我希望应用程序根据"客户端"动态使用正确的样式。我网址的一部分。

实施例。 client1具有绿色背景,client2具有蓝色背景。除了client1和client2正在运行相同的Web应用程序。

我的RouteConfig.cs文件中有以下内容:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "client1",
            url: "client1/{controller}/{action}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "client2",
            url: "client2/{controller}/{action}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }

使用解决方案进行更新:

以下是我要找的答案:

    routes.MapRoute(
    name: "client",
    url: "{client}/{controller}/{action}",
    defaults: new { controller = "Home", action = "Index" },
    constraints: new { client = "client1|client2" }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

1 个答案:

答案 0 :(得分:3)

注意:未经测试,只是一个想法。无法在评论中进行格式化

您可以使用客户端网址命名您的css文件,如:

<强> test.com.styles.css

修改

我刚刚意识到我们无法访问BundleConfig.cs中的HttpContext,因为此时尚未创建Session。

因此,在您查看(_Layout.cshtml)时,您将生成样式表名称,如下所示:

        @{
            var host = HttpContext.Current.Request.Url.AbsoluteUri;
    // Will be http://www.test.com/AREA1


            var area = host.Split('/')[3];

    // SPLIT will give you AREA1

            var styleSheet = string.Format("{0}.styles.css", area);

    // This will give you Stylesheet Name:
    // So then you can use simple HTML to load the css file

var styleSheetUrl = string.Format("{0}{1}", "/LocationOfCssFile/", styleSheet);

        }

    <link rel="stylesheet" href="@styleSheetUrl">

您可以从此处获取所需的正确URL部分:

https://stackoverflow.com/a/593715/1910735