Справка по смене тем ASP.net MVC - PullRequest
0 голосов
/ 28 июня 2011

У меня есть сайт, разработанный с использованием ASP.Net MVC. Теперь я хочу, чтобы на основании запроса (в зависимости от страны) я хотел изменить тему веб-сайта.

Пример: для США - тема 1 для Канады - тема 2

Если запрос не соответствует какой-либо теме, я хочу отобразить ее по умолчанию (моя текущая тема).

Как я могу добиться этого динамически.

Нужно ли мне переписывать мой CSS снова или есть лучший способ для этого?

Пожалуйста, поделитесь своими идеями

Заранее спасибо :)

Ответы [ 2 ]

1 голос
/ 28 июня 2011

Вы должны определить глобальный CSS-файл для общих стилей. Предполагая, что у вас есть какой-то вспомогательный метод для доступа к текущей стране, вы можете условно загрузить таблицу стилей для конкретной страны или загрузить таблицу стилей на основе правила, например, таблица стилей с тем же именем, что и страна (следующий код не проверен):

<link rel="stylesheet" type="text/css" href="css/global.css">

// conditional

@if (SiteHelper.CurrentCountry == "USA") {
    <link rel="stylesheet" type="text/css" href="css/usa.css">
}

// or assume a css file exists with the country name

<link rel="stylesheet" type="text/css" href="css/@(SiteHelper.CurrentCountry).css">

Я бы порекомендовал использовать разные страницы макета для каждой страны / темы, поскольку это дает вам гораздо больше контроля. По сути, вы должны переместить вышеуказанную логику в _ViewStart.cshtml и установить макет на основе текущей страны.

0 голосов
/ 28 июня 2011

Не уверен, что это лучший подход, но это то, что я делаю.У меня есть структура папок, подобная этой:

   /Content
    layout.css
   /Content/Images
   /Content/Themes/ThemeUSA
                   layout.css
   /Content/Themes/ThemeUSA/Images

Затем я использую Helper Extensions, чтобы вернуть правильный путь, например для изображения:

<img src="@Url.Image(Model.EnhImg)" alt="@Model.EnhImgAlt" />

, где

public static string Image(this UrlHelper helper, string fileName)
{
    string sLocation = Content() + "images/" + fileName;
    return helper.Content(sLocation);
}

private static string Content()
{
    string sLocation = "~/content/";
    string sTheme = (string)HttpContext.Current.Session["Theme"];
    if (!String.IsNullOrEmpty(sTheme))
    {
        sLocation += "themes/" +sTheme + "/";
    }
    return sLocation;
}

Изображения в папках тем имеют то же имя, что и в папке по умолчанию.То же самое для таблиц стилей.

...