[英]Localization using <a> element or button instead of <select>
我的網站有一個本地化例程,用於兩種語言,使用下拉選擇元素來選擇工作正常的語言。 我想使用標簽或按鈕而不是下拉選擇元素。 我一直在試圖弄清楚如何將文化參數傳遞給操作方法以設置文化 cookie,該 cookie 是使用選擇元素的名稱標簽助手完成的。 使用標簽或按鈕設置語言的最佳方法是什么。 您的幫助將不勝感激。
public class HomeController : Controller
{
private readonly IHtmlLocalizer<HomeController> _localizer;
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger, IHtmlLocalizer<HomeController> localizer)
{
_logger = logger;
_localizer = localizer;
}
public IActionResult Index()
{
ViewData["Home"] = _localizer["Home"];
return View();
}
[HttpPost]
public IActionResult CultureManagement(string culture, string returnUrl)
{
Response.Cookies.Append(CookieRequestCultureProvider.DefaultCookieName, CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.Now.AddDays(30) });
return LocalRedirect(returnUrl);
}
}
使用選擇下拉菜單
@using Microsoft.AspNetCore.Localization
@inject Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Builder.RequestLocalizationOptions> locOptions
@{
var culture = Context.Features.Get<Microsoft.AspNetCore.Localization.IRequestCultureFeature>();
var cultureList = locOptions.Value.SupportedUICultures!.Select(x => new SelectListItem { Value = x.Name, Text = localizer.GetString(x.Name) }).ToList();
var returnUrl = string.IsNullOrWhiteSpace(Context.Request.Path) ? "~/" : $"~{Context.Request.Path.Value}{Context.Request.QueryString}";
}
<div>
<form asp-action="CultureManagement" asp-controller="Home" method="post" asp-route-returnUrl="@returnUrl">
<i class="fa fa-globe"></i>
<select id="DropDownList" class="selectLang" name="culture" asp-for="@culture!.RequestCulture.UICulture.Name" asp-items="cultureList" onchange="this.form.submit();"></select>
</form>
</div>
使用 Button 或元素
<div>
<form id="cultureform" asp-controller="Home" asp-action="CultureManagement" asp-route-returnUrl="@returnUrl" method="post" >
@if (culture!.RequestCulture.UICulture.Name == "en-US")
{
<button type="button" class="btn btn-link" name="culture" asp-for="@culture.RequestCulture.UICulture.Name" onclick="this.form.submit();">Fr</button>
}
else
{
<button type="button" class="btn btn-link" name="culture" asp-for="@culture.RequestCulture.UICulture.Name" onclick="this.form.submit();">En</button>
}
</form>
</div>
為什么使用post
請求來設置文化? 只需讓它get
並使用<a>
或<button>
。
public IActionResult OnGetCultureManagement(string culture, string returnUrl)
{
// ...
}
使用<a>
:
<a herf="/?handler=CultureManagement&culture=en&returnUrl=returnUrl">EN</a>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.