Asp. net Сообщение от Core Razor Pages от _layout - PullRequest
0 голосов
/ 10 февраля 2020

То, что я пытаюсь сделать, это изменить тему приложения с помощью флажка, который заполняется как темный или светлый из сеанса сервера.

Я знаю, что тему (таблицу стилей) можно изменить с помощью JavaScript, но это приводит к загрузке таблицы стилей по умолчанию Bootstrap, а затем темной, которая вызывает мерцание экрана.

Что мне нужно сделать, это вернуть css с сервера, который думал, что метод post, как показано ниже.

<div>
    <form id="theme-switcher" method="post">
        <div class="custom-control custom-switch">
            <input type="checkbox" class="custom-control-input" asp-for="IsDark" id="theme" />
            <label class="custom-control-label" for="theme">Theme</label>
        </div>
        <button id="change" type="submit" class="btn btn-primary">Change</button>
    </form>
</div>

Код выше может быть в компоненте представления или частичном представлении, но Кажется, я не могу найти способ публикации из.

_Layout.cs html

@{
    bool isDark = HttpContext.HttpContext.Session.GetBoolean("IsDark");
}

<!-- Custom styles -->
@if (CultureInfo.CurrentUICulture.Name == "ar-LB")
{
    if (isDark)
    {
        <link rel="stylesheet" type="text/css" href="~/css/site-dark-rtl.css">
    }
    else
    {
        <link rel="stylesheet" type="text/css" href="~/css/site-rtl.css">
    }
}
else
{
    if (isDark)
    {
        <link rel="stylesheet" type="text/css" href="~/css/site-dark.css">
    }
    else
    {
        <link rel="stylesheet" type="text/css" href="~/css/site.css">
    }
}

То, что я до сих пор связывал, - это частичные представления и просматривать компоненты, но, насколько я обнаружил, частичные представления не могут иметь код с OnPost (при добавлении @ page в частичное представление я получаю данные представления не могут быть нулевыми, хотя данные модели и представления установлены), а компоненты представления не могут вызывать методы.

Какой подход следует использовать?

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете отправлять сообщения по разным маршрутам, независимо от того, где вы находитесь в данный момент. Итак, если у вас есть страница Razor SwitchTheme.cshtml с выделенным кодом, который переключает тему на POST, то вы можете настроить тег <form> для публикации на этой странице:

<form asp-page="/SwitchTheme" method="post">
    <!-- … -->
</form>

Обратите внимание на использование помощник по тегам asp-page для создания атрибута action со ссылкой на страницу.

Для изменения таких вещей, как дизайн, в котором нет содержимого страницы, которое вы хотите отобразить, вы также можете используйте простой контроллер, который вносит изменения, а затем перенаправляет обратно. Тогда вместо этого вы должны использовать помощники тегов asp-action и asp-controller:

<form asp-controller="Utility" asp-action="SwitchTheme" asp-route-returnUrl="@Context.Request.Path" method="post">
    <!-- … -->
</form>
public class UtilityController : ControllerBase
{
    [HttpPost]
    public IActionResult SwitchTheme([FromForm] bool isDark, string returnUrl)
    {
        // switch the theme

        // redirect back to where it came from
        return LocalRedirect(returnUrl);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...