2017-09-11 31 views
1

我尝试通过链接张贴到SetLanguage动作,但不知道如何完成以下代码:如何通过连接柱在ASP.NET核心

<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与culture : 'EN'参数,例如?

@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); 
} 
+0

是的,这肯定会做的工作 – Musab

回答

2

链接是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发布点击。

+0

它会工作,说3个按钮他们所有的属性名称? – Serge

+0

是的。它基本上就像一个收音机,只有当你点击一个时才会立即提交。 –

+0

好的...但是,我想成为链接,因为所有的CSS都被设计成一个链接...有没有一种方法可以添加隐藏和onclick提交? – Serge

2

我会用行动上的链接本身,我使用的代码,这个特殊的一块在我的项目。它就像一个魅力。

<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); 
     } 

希望这有助于你在你的项目!

+0

恐怕将是一个GET操作,而不是一个POST一个... – Serge

+0

奇怪..对我的作品 –

+0

做你的动作有一个'[HttpPost]'属性? – Serge

1

您可以使用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>