如何通过ASP.NET Core中的链接进行发布

Ser*_*rge 9 c# asp.net asp.net-core asp.net-core-1.1

我尝试通过链接发布到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>
Run Code Online (Sandbox Code Playgroud)

我应该使用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);
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*att 6

链接是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>
Run Code Online (Sandbox Code Playgroud)

然后,无论您单击哪个按钮,其值都会被发布。如果您希望它看起来像链接,则可以相应地设置按钮的样式。

另外,您可以保留链接,但是您需要使用AJAX来发布点击。