ASP.NET Core MVC视图/分部视图多语言切换失效排查求助
问题:ASP.NET Core MVC双视图语言切换失效
我基于ASP.NET Core MVC开发了一个基础Web应用,需求是通过下拉控件切换页面语言(波兰语、英语),涉及导航栏、首页及关于页。最初采用共享资源本地化方案,现要求改用更直接的方式:为所有视图和分部视图创建双版本(如波兰语版Index_pl.cshtml、英语版Index.cshtml)。我已完成以下操作:
- 实现下拉切换按钮
- 复制对应视图生成双语言版本
- 编写JavaScript切换函数并更新控制器
但点击切换按钮后页面无任何变化,始终显示默认英语页面。
视图结构
- Home目录:
Index.cshtml、Index_pl.cshtml、Privacy.cshtml、Error.cshtml - About目录:
Index.cshtml、Index_pl.cshtml - Shared目录:
_Layout.cshtml、_NavBar.cshtml、_NavBar_pl.cshtml、_ValidationScriptsPartial.cshtml
_Layout.cshtml代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>@ViewData["Title"] - MelanomaWebApp</title> <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" /> <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" /> <link rel="stylesheet" href="~/MelanomaWebApp.styles.css" asp-append-version="true" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"> </head> <body> <header> <partial name="~/Views/Shared/_NavBar.cshtml"></partial> </header> <div class="container"> <main role="main" class="pb-3"> @RenderBody() </main> </div> <footer class="border-top footer text-muted"> <div class="container"> © 2024 - MelanomaWebApp - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a> </div> </footer> <script src="~/lib/jquery/dist/jquery.min.js"></script> <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script> <script src="~/js/site.js" asp-append-version="true"></script> @await RenderSectionAsync("Scripts", required: false) <script> function changeLanguage(language) { currentLanguage = language; location.reload(); } </script> </body> </html>
_NavBar.cshtml代码(_NavBar_pl.cshtml结构相同,文本为波兰语)
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3"> <div class="container-fluid"> <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">MelanomaWebApp</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between"> <ul class="navbar-nav flex-grow-1"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="About" asp-action="Index">About</a> </li> </ul> </div> <div> <div class="nav-item dropdown"> <a class="nav-link dropdown-toggle text-dark" href="#" id="navbarDropdown" role="button" data-toggle="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="bi bi-globe-americas"></i> Change language (PL/EN) </a> <div class="dropdown-menu dropdown-menu-end bg-light text-center" aria-labelledby="navbarDropdown"> <a class="dropdown-item text-secondary" style="text-decoration: none;" href="#" onclick="changeLanguage('PL')"> <i class="pl-icon"></i> Polski (PL) </a> <a class="dropdown-item text-secondary" style="text-decoration: none;" href="#" onclick="changeLanguage('EN')"> <i class="flag flag-united-kingdom"></i> English (EN) </a> </div> </div> </div> </div> </nav>
Home视图Index.cshtml代码(Index_pl.cshtml结构相同)
@{ ViewData["Title"] = "Home Page"; } <div class="container text-center mt-5 mb-5 fs-3 fw-bold"> <p>The name of the project is confidential</p> </div> <div class="container text-center mt-5 mb-5"> <p>Research project No. xxxx<br /> of some Research State<br /> Location </p> </div> <div class="container fixed-bottom mb-2"> <div class="row d-flex mb-5 text-center text-muted"> <div class="col p-2"> <p>Department of something <br /> Some university <br /> address <br /> address</p> </div> <div class="col ms-auto p-2"> <p>name of institute <br /> address<br /> address</p> </div> </div> </div>
About视图Index.cshtml代码(Index_pl.cshtml结构相同)
<body> <div class="text-center"> <p>This is some about page content</p> </div> </body>
HomeController代码
using MelanomaWebApp.Models; using Microsoft.AspNetCore.Mvc; using System.Diagnostics; namespace MelanomaWebApp.Controllers { public class HomeController : Controller { private readonly ILogger<HomeController> _logger; private string CurrentLanguage { get; set; } = "EN"; public HomeController(ILogger<HomeController> logger) { _logger = logger; } public IActionResult Index() { string viewName = "Index"; if (CurrentLanguage == "PL") { viewName += "_pl"; } return View(viewName); } public IActionResult Index_pl() { return View(); } public IActionResult Privacy() { return View(); } [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } } }
当前状态
点击EN或PL按钮后无任何变化,页面始终显示默认英语版本。
内容的提问来源于stack exchange,提问作者snovbalmay
相关产品推荐
相关产品推荐

