2017-09-11 26 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>