2017-09-11 11 views
1

나는 다음과 같은 코드를 완성하는 방법을 잘하지 않는 링크를 통해 SetLanguage 조치에 게시하려고하지만, ASP.NET 코어에서 링크를 통해 게시물에 예를 들어 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); 
} 
+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

OK ... 그러나 Il'd는 링크가되고 싶습니다. 이미 모든 CSS가 링크로 설계되었으므로 ... hidden과 onclick submit을 추가하는 방법이 있습니까? – 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>