我尝试通过链接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="?culture=@culture.Name">@culture.Name</a>
</div>
}
</form>
我应该使用form
还是有一个直接的方法来发送一个带有culture : 'EN'
参数的POST,例如?@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);
}
4条答案
按热度按时间qaxu7uf21#
链接是GET请求。您不能通过链接发布;这就是表格的作用。你需要的东西如下:
然后,无论您单击哪个按钮,其值都将被发布。如果你想让它看起来像链接,你可以相应地设置按钮的样式。
或者,你可以保留链接,但你需要使用 AJAX 来发布点击。
rvpgvaaj2#
我将使用
GET
方法对链接本身使用操作,而不是依赖于POST
方法。我在我的项目中使用了这段特殊的代码,它工作起来很有魅力。我的控制器代码看起来像这样:
z2acfund3#
你可以使用jQuery:
kzipqqlq4#
您可以创建一个TagHelper,它将表单生成为html,并接收您想要放置的配置作为参数。使用TagHelper:TagHelper类:
使用方法:
控制器:
方法:
注册:
Example on Github
我没有使用它,我只是带着意见来的
您可以继承AnchorTagHelper并重写Process方法