具有语言切换器的MVC中的区域定位

问题描述 投票:0回答:2

我有一个本地化的MVC应用程序。直到我将Areas添加到我的应用程序中,这一直很好。我一直在使用此语言切换器在可用语言之间进行切换。

Language switcher

这里是HTML代码:

<div class="dropdown-menu dropdown-menu-fit dropdown-menu-right dropdown-menu-anim dropdown-menu-top-unround">
        <ul id="mLangSel" class="kt-nav kt-margin-t-10 kt-margin-b-10">
            <li id="mLangEn" class="kt-nav__item ">
                <a href="@Url.Action("SwitchUICulture","Home",new {lang="en" })" class="kt-nav__link">
                    <span class="kt-nav__link-icon"><img class="rounded-circle" data-offset="10px,0px" src="~/assets/media/flags/012-uk.svg" alt="" /></span>
                    <span class="kt-nav__link-text" style="margin-left:10px">@Menus.MENU_LANG_ENGLISH</span>
                </a>
            </li>
            <li id="mLangIs" class="kt-nav__item">
                <a href="@Url.Action("SwitchUICulture","Home",new {lang="is-IS" })" class="kt-nav__link">
                    <span class="kt-nav__link-icon"><img class="rounded-circle" style="width:30px;height:auto;" src="~/assets/media/flags/is_iceland.svg" alt="" /></span>
                    <span class="kt-nav__link-text" style="margin-left:10px">@Menus.MENU_LANG_ICELANDIC</span>
                </a>
            </li>
        </ul>
    </div>

这是Controller方法:

 public ActionResult SwitchUICulture(string lang)
    {
        //TODO: Add update to UILang claim for user on every change
        if (!string.IsNullOrEmpty(lang))
        {
            Session["Culture"] = new CultureInfo(lang);
        }


        return Redirect(Request.UrlReferrer.ToString()); // RedirectToAction("Index");

    }

我的Global.cs文件中也有此方法

 protected void Application_AcquireRequestState(object sender, EventArgs e)
    {

        if (HttpContext.Current.Session != null)
        {

            CultureInfo ci = (CultureInfo)this.Session["Culture"];
            if (ci == null)
            {
                string langName = "en";
                //Try to get values from Accept lang HTTP header
                //if (HttpContext.Current.Request.UserLanguages != null && HttpContext.Current.Request.UserLanguages.Length != 0)
                //{
                //    langName = HttpContext.Current.Request.UserLanguages[0].Substring(0, 2);
                //}
                ci = new CultureInfo(langName);
                this.Session["Culture"] = ci;
                this.Session["UiClaim"] = false;
            }
            else
            {
                var lang = ((ClaimsIdentity)User.Identity).FindFirst(UserClaims.User_Language);

                if (lang!=null && lang.Value!="None" && ci.Name!=lang.Value)
                {
                    if (this.Session["UiClaim"].Equals(false))
                    {
                        ci = new CultureInfo(lang.Value);
                        this.Session["Culture"] = ci;
                        this.Session["UiClaim"] = true;
                    }


                }

            }

            Thread.CurrentThread.CurrentUICulture = ci;

            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
        }
    }

[所有控制器都继承了SwitchUICulture操作所在的基本控制器。在“区域”之外,一切都很好,但是当我在任何区域内的视图中运行都失败时,我得到此URL

URL when switching language

有人对此有解决方案吗?

c# asp.net .net asp.net-mvc localization
2个回答
0
投票

我认为您的路径网址不正确。点击网址或提供更多的控制器和区域。我会帮助你


0
投票

太简单了,解决方案太接近了:)将Area =“”添加到Url.Action就已完成。

    <div class="dropdown-menu dropdown-menu-fit dropdown-menu-right dropdown-menu-anim dropdown-menu-top-unround">
        <ul id="mLangSel" class="kt-nav kt-margin-t-10 kt-margin-b-10">
            <li id="mLangEn" class="kt-nav__item ">
                <a href="@Url.Action("SwitchUICulture","Home",new {lang="en", area = ""})" class="kt-nav__link">
                    <span class="kt-nav__link-icon"><img class="rounded-circle" data-offset="10px,0px" src="~/assets/media/flags/012-uk.svg" alt="" /></span>
                    <span class="kt-nav__link-text" style="margin-left:10px">@Menus.MENU_LANG_ENGLISH</span>
                </a>
            </li>
            <li id="mLangIs" class="kt-nav__item">
                <a href="@Url.Action("SwitchUICulture","Home",new {lang="is-IS", area = "" })" class="kt-nav__link">
                    <span class="kt-nav__link-icon"><img class="rounded-circle" style="width:30px;height:auto;" src="~/assets/media/flags/is_iceland.svg" alt="" /></span>
                    <span class="kt-nav__link-text" style="margin-left:10px">@Menus.MENU_LANG_ICELANDIC</span>
                </a>
            </li>
        </ul>
    </div>

这是更正的代码段

© www.soinside.com 2019 - 2024. All rights reserved.