POSTを介してSetLanguageアクションにリンクしますが、次のコードを完成させる方法がわかりません。
_<form id="selectLanguage" asp-controller="Home" asp-action="SetLanguage" asp-route-returnUrl="@Context.Request.Path" method="post" role="form">
@foreach (var culture in cultures) {
<div>
<a href="[email protected]">@culture.Name</a>
</div>
}
</form>
_
form
を使用する必要がありますか、またはPOST with _culture : 'EN'
_ param、with param)を送信する直接的な方法がありますか?
@Url.Action(action: "SetLanguage", controller:"Home", values: new { culture = culture.Name }, protocol:"POST")
は機能しますか?
私のコントローラーコードは
_[HttpPost]
public IActionResult SetLanguage(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
);
return LocalRedirect(returnUrl);
}
_
リンクはGETリクエストです。リンクを介して投稿することはできません。それがフォームの目的です。次のようなものが必要です。
<form id="selectLanguage" asp-controller="Home" asp-action="SetLanguage" asp-route-returnUrl="@Context.Request.Path" method="post" role="form">
@foreach (var culture in cultures) {
<div>
<button type="submit" name="culture" value="@culture.Name">
@culture.Name
</button>
</div>
}
</form>
次に、どのボタンをクリックしても、その値が投稿されます。リンクのようにしたい場合は、それに応じてボタンのスタイルを設定できます。
または、リンクを維持することもできますが、クリックで投稿するにはAJAXを使用する必要があります。
リンク自体にアクションを使用します。この特定のコードをプロジェクトで使用します。そしてそれは魅力のように働きます。
<a asp-controller="YourController"
asp-action="SetLanguage"
asp-route-culture="@culture.Name"
asp-route-returnUri="@Context.Request.Path">
</a>
私のコントローラーコードはこのようになります:
public IActionResult SetLanguage(string culture, string returnUri = "")
{
SetSettings(newCultureName);
return Redirect(returnUri);
}
これがあなたのプロジェクトに役立つことを願っています!
あなたはJQueryを使うことができます:
@foreach (var culture in cultures)
{
<div>
<a href="javascript:setLanguage('@culture.Name')">@culture.Name</a>
</div>
}
<script type="text/javascript">
function setLanguage(culture)
{
$.post("/home/setlanguage", { culture: culture})
.done(function (data) {
location.reload();
});
}
</script>