Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Razor页面:从_Layout.cshtml设置cookie_C#_Asp.net Core_Culture_Razor Pages - Fatal编程技术网

C# Razor页面:从_Layout.cshtml设置cookie

C# Razor页面:从_Layout.cshtml设置cookie,c#,asp.net-core,culture,razor-pages,C#,Asp.net Core,Culture,Razor Pages,在_Layout.cshtml中,我使用菜单更改应用程序的语言,如: 我还没有对此进行测试,但是如何使用JavaScript设置cookie,然后重新加载页面呢。服务器端razor页面代码应该检查代码,而不是查询参数 类似于_布局页面上的以下内容。修改菜单以调用JS函数,而不是带有查询参数的链接。在JS中,设置cookie并重新加载页面 <nav id="nav-lang"> <ul> <li class="nav-item"

在_Layout.cshtml中,我使用菜单更改应用程序的语言,如:



我还没有对此进行测试,但是如何使用JavaScript设置cookie,然后重新加载页面呢。服务器端razor页面代码应该检查代码,而不是查询参数

类似于_布局页面上的以下内容。修改菜单以调用JS函数,而不是带有查询参数的链接。在JS中,设置cookie并重新加载页面

<nav id="nav-lang">
    <ul>
        <li class="nav-item" onClick="setCulture('en-EN')">EN</li>
        <li class="nav-item" onClick="setCulture('pl-PL')">PL</li>
    </ul>
</nav>
...
<script>
    function setCulture(culture) {
        document.cookie = "culture="+culture;
        location.reload();
    }
</script>

  • en
  • pl
... 函数集文化(文化){ document.cookie=“culture=”+文化; location.reload(); }
谢谢你,布拉德。你提出的解决方案很有效。同时,我在其他地方也有其他建议,我也会把它发布给以后搜索答案的人

在_Layout.cshtml中:

<nav id="nav-lang">
    <ul>
        <li><a asp-page="/Index" asp-page-handler="SetCulture" asp-route-culture="en-EN">EN</a></li>
        <li><a asp-page="/Index" asp-page-handler="SetCulture" asp-route-culture="pl-PL">PL</a></li>
    </ul>
</nav>

  • PL
在索引的代码隐藏中(或具有代码隐藏的任何其他页面):

公共异步任务OnGetSetCultureAsync(字符串区域性) { HttpContext.Response.Cookies.Append(“Culture”,“c=“+Culture+”| uic=“+Culture”); var returnUrl=Request.Headers[“Referer”].ToString(); if(returnUrl.Contains(“?culture=”)) { var url=returnUrl.Substring(0,returnUrl.IndexOf(“?culture=”); 返回重定向(url+“?区域性=”+区域性); } 其他的 { 返回重定向(returnUrl+“?culture=“+culture); } }
当然,要使这两种解决方案都起作用,Startup.cs>>Configure中必须包含以下信息:

var supportedCultures = new[]
            {
                new CultureInfo("en-US"),
                new CultureInfo("pl-PL")
            };

            var lo = new RequestLocalizationOptions // Localization Options
            {
                DefaultRequestCulture = new RequestCulture("en-US"),
                SupportedCultures = supportedCultures,
                SupportedUICultures = supportedCultures
            };

            var cp = lo.RequestCultureProviders.OfType<CookieRequestCultureProvider>().First(); // Culture provider
            cp.CookieName = "Culture";
var-supportedCultures=new[]
{
新文化信息(“美国”),
新文化信息(“pl”)
};
var lo=新请求本地化选项//本地化选项
{
DefaultRequestCulture=新的RequestCulture(“en-US”),
SupportedCultures=SupportedCultures,
支持的教育=支持的文化
};
var cp=lo.RequestCultureProviders.OfType().First();//文化提供者
cp.CookieName=“文化”;
var supportedCultures = new[]
            {
                new CultureInfo("en-US"),
                new CultureInfo("pl-PL")
            };

            var lo = new RequestLocalizationOptions // Localization Options
            {
                DefaultRequestCulture = new RequestCulture("en-US"),
                SupportedCultures = supportedCultures,
                SupportedUICultures = supportedCultures
            };

            var cp = lo.RequestCultureProviders.OfType<CookieRequestCultureProvider>().First(); // Culture provider
            cp.CookieName = "Culture";