在 MVC 中动态更改主题 ASP.NET

Dynamically Change Theme in ASP.NET MVC

提问人:Musa AKYUZ 提问时间:11/1/2023 更新时间:11/1/2023 访问量:21

问:

我打算根据动态切换 css 文件来更改主题。

@if (ViewBag.Theme == 1)
{
    <link rel="stylesheet" href="~/css/dark-theme.css" />
}
else
{
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
}

在 Shared/_layout.cshtml 文件中:

@if (ViewBag.Theme == 1)
{
    <nav class="navbar navbar-expand-lg bg-dark" data-bs-theme="dark">
        <div class="container-fluid">
            //....
        </div>
        <div class="d-flex form-check form-switch justify-content-end mx-lg-3">
            <input class="btn" type="button" onclick="changeLight()" value="Light">
        </div>
    </nav>
}
else
{
    <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
        <div class="container-fluid">
            //....
        </div>
        <div class="d-flex form-check form-switch justify-content-end mx-lg-3">
            <input class="btn" type="button" onclick="changeDark()" value="Dark">
        </div>
    </nav>
}

并通过 JavaScript 和 jQuery :

function changeDark() {
    $.get(`@Url.Action("ToDark", "Home")`, function(data) {
        location.reload()
    })
}

function changeLight() {
    $.get(`@Url.Action("ToLight", "Home")`, function (data) {
        location.reload()
    })
}

和从控制器:

        [HttpGet]
        public void ToDark()
        {
            ViewBag.Theme = 1;
        }

        [HttpGet]
        public void ToLight()
        {
            ViewBag.Theme = 0;
        }

我的想法是_layout页面不会再次重新加载。只是渲染身体。如何解决这个问题?

CSS ASP.NET-MVC 主题

评论

0赞 Musa AKYUZ 11/2/2023
我不知道为什么,但我改变了工作。TempData["Theme"]ViewBag.Theme

答: 暂无答案