C# Razor页面:从_Layout.cshtml设置cookie
在_Layout.cshtml中,我使用菜单更改应用程序的语言,如: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"
-
-
我还没有对此进行测试,但是如何使用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";