웹폼에서사용했던 안 보이는 버튼을 이용한 비하인드 함수 호출을 'ASP.NET MVC'에서도 사용할 수 있습니다.
(참고 : [ASP.Net] 자바스크립트에서 비하인드 호출하기)
그런데 MS가 'ajax.net'을 포기하는 뉘앙스인 데다 MVC에서는 'ajax.net'를 사용하는데 번거로운 편이라
그냥 제이쿼리(JQuery)의 아작스(ajax)기능을 이용하여 비하인드 함수를 호출해 보겠습니다.
테스트를 위해 HTML코드를 다음과 같이 작성합니다.
<input id="txtData" type="text" />
<input id="btnAjax" type="button" value="button" onclick="CallBehind();" />
<label id = "labOut" for="btnAjax" ></label>
<script type="text/javascript">
function CallBehind()
{
var sTxt = $(txtData).val();
$('label').text(sTxt);
alert(sTxt);
}
</script>
이렇게 코드를 작성했다면 다음과 같이 동작합니다.
비하인드 코드는 다음과 같이 작성합니다.
[HttpPost]
public JsonResult AjaxCall(string sData)
{
return Json(new { sReturn = "MVC:" + sData });
}
제이쿼리를 이용하여 아작스 기능을 이용하여 비동기통신이 가능합니다.
(참고 : 스택오버플로 - jQuery.Ajax with MVC)
우리는 'ASP.NET MVC'를 사용하고 있기 때문에 주소는 URL헬퍼(URL Helper)를 이용하여 작성하는 것이 좋습니다.
/*
제이쿼리 ajax 형식
$.ajax({
url: '컨트롤러 주소',
type: "POST",
data: { '[파라매타 이름]': [넘길 값] },
dataType: "json",
success: function (data) {} });
*/
function CallBehind()
{
var sTxt = $(txtData).val();
var sReturn = "";
$.ajax({
url: '@Url.Action("AjaxCall","home")',
type: "POST",
data: { 'sData': sTxt },
dataType: "json",
success: function (data)
{
sReturn = data.sReturn;
alert(sReturn);
}
});
$('label').text(sReturn);
}
(참고 : 스택오버플로 - jQuery.Ajax with MVC)
간단하게 함수를 호출할 때는 다음과 같이 합니다.
/*
$.post( url: '컨트롤러 주소'
, { '[파라매타 이름]': [넘길 값] }
, function (data)
{
alert(data.status);
});
*/
$.post('@Url.Action("SelectLang","TrainingGame")'
, { 'sLang': value }
, function (data) {});
제이쿼리를 사용하지 않고도 비하인드코드를 호출할 수 있을 텐데 자료가 없어서 제이쿼리를 뒤저보니.....
라이프사이클상 너무 복잡해진다고 봐야....
이럴땐 그냥 남이 만들어둔 거 쓰는 게 최고라는거 ㅎㅎㅎㅎ