Не удалось обновить sh страницу из действия контроллера (ASP. NET MVC Core) - PullRequest
0 голосов
/ 13 июля 2020

Я могу успешно скомпилировать файл S CSS в методе Change, но на стороне клиента wwwroot каталог не обновляется, пока я не нажму кнопку refre sh в браузере.

Есть ли способ запустить событие refre sh в этом методе действия Change?

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

`View (index.cs html)

<button onclick="clickHandler">Change Theme</button>

Script (site. js)

function clickHandler() {

    $.ajax({
        type: "POST",
        url: "Home/Change",
        data: { jsonData: JSON.stringify("") },
        success: function (data) {
            alert("saved successfully");
        }
    })
}

Controller Действие (HomeController.cs)

[HttpPost]
        public IActionResult Change()
        {
            string basePath = _hostingEnvironment.WebRootPath;
            string importFilePath = Path.Combine(basePath, "import.scss");
            string inputFilePath = Path.Combine(basePath, "custom.scss");
            string importContent = System.IO.File.ReadAllText(importFilePath);
            string inputContent = "$accent: #08f410;\n$accent-font: #e3165b;" + importContent;
            System.IO.File.WriteAllText(inputFilePath, inputContent);
            string outputFilePath = Path.Combine(basePath, "custom.css");

            CompilationOptions options = new CompilationOptions
            {
                IncludePaths = new[] { "node_modules/@{third-party-package}/" }
            };
            CompilationResult result = SassCompiler.CompileFile(inputFilePath, outputFilePath, null, options);
            System.IO.File.WriteAllText(outputFilePath, result.CompiledContent);
            return View("Index");
        }

Макет

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - DynamicTheme</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
    <link rel="stylesheet" href="~/css/site.css" />
    <link rel="stylesheet" href="~/custom.css" />

1 Ответ

0 голосов
/ 14 июля 2020

Насколько мне известно, AJAX позволяет обновлять веб-страницы асинхронно, негласно обмениваясь данными с веб-сервером. Это означает, что можно обновлять части веб-страницы, не перезагружая всю страницу.

Это означает, что если вы не установите логи перезагрузки c в методе ajax успеха, он не обновит sh всю страницу (независимо от того, что вы сделали в контроллере MVC).

Он отправит запрос к действию MVC без обновления всей страницы и получит представление html результат в качестве ответа.

Если вы хотите обновить sh страницу после успешного выполнения ajax, я предлагаю вам попробовать вызвать метод location.reload(true); в ajax success метод.

Более подробно вы можете обратиться на этот сайт. js коды:

function clickHandler() {

    $.ajax({
        type: "POST",
        url: "Home/Change",
        data: { jsonData: JSON.stringify("") },
        success: function (data) {
            alert("saved successfully");
            location.reload(true);
        }
    })
}
...