2017-09-11 3 views
1

je tente de POST à ​​l'action RéglerLangue via un lien, mais ne savez pas comment finaliser le code suivant:Comment publier des messages par un lien dans ASP.NET base

<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> 

Dois-je utiliser le form ou là est une méthode directe pour envoyer un POST avec culture : 'EN' param, par exemple?

Est-ce que le @Url.Action(action: "SetLanguage", controller:"Home", values: new { culture = culture.Name }, protocol:"POST") fait le travail?

Code Controller My est

[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

oui, ce serait certainement faire le travail – Musab

Répondre

2

Les liens sont des requêtes GET. Vous ne pouvez pas poster via un lien; c'est ce que sont les formes. Vous auriez besoin de quelque chose comme:

<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> 

Ensuite, quel que soit le bouton sur lequel vous cliquez, sa valeur sera affichée. Si vous voulez qu'il ressemble à des liens, vous pouvez personnaliser les boutons en conséquence.

Vous pouvez également conserver les liens, mais vous devez utiliser AJAX pour publier un clic.

+0

ça va marcher, disons 3 boutons tous avec attribut Prénom? – Serge

+0

Ouais. C'est essentiellement comme une radio, seulement elle se soumet immédiatement quand vous cliquez sur un. –

+0

OK ... Cependant, Il aimerait être un lien, car déjà tout CSS conçu pour être un lien ... est-il un moyen d'ajouter caché et onclick soumettre? – Serge

2

Je voudrais utiliser l'action sur les liens lui-même, j'utilise ce morceau de code particulier dans mon projet. Et ça fonctionne comme un charme.

<a asp-controller="YourController" 
asp-action="SetLanguage" 
asp-route-culture="@culture.Name" 
asp-route-returnUri="@Context.Request.Path"> 
</a> 

Mon contrôleur look code comme ceci alors:

public IActionResult SetLanguage(string culture, string returnUri = "") 
     { 
      SetSettings(newCultureName); 
      return Redirect(returnUri); 
     } 

espoir que cela vous aide dans votre projet!

+0

peur qui sera une action GET, POST pas un ... – Serge

+0

étrange .. fonctionne pour moi –

+0

Votre action ont un attribut [HttpPost] '? – Serge

1

Vous pouvez utiliser 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>