You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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">
            &copy; 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>
<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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 07:46:00