ASP.NET AJAX PageMethods - ASPX.cs의 static 메서드를 AJAX로 호출
Ajax 호출이 붐을 일으키면서 WCF + Ajax도 나오고 Web API도 나오고 있는데요. 그보다 더 간단한 방법으로 .aspx 웹 페이지의 .aspx.cs 코드에 정적 메서드를 추가하는 것으로도 Ajax 호출이 가능한 웹 메서드를 만들 수 있습니다.
얼마나 간단한지... 어디 한번 직접 만들어 볼까요? ^^
여느 때와 다름없이 그냥 ASP.NET 웹 애플리케이션을 하나 만들고 기본 생성된 default.aspx.cs 파일에 다음과 같이 [WebMethod] 특성이 부여된 정적 메서드를 추가합니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static Dictionary<string, string> DoMethod(string arg)
{
var result = new Dictionary<string, string>();
result.Add(arg, Guid.NewGuid().ToString());
return result;
}
}
}
이걸로 끝입니다. ^^ 정말 간단합니다.
호출은 기본 ajax 호출과 다를 바 없습니다. jQuery를 사용한다면 다음과 같은 코드를 .aspx의 HTML에서 사용하면 됩니다.
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<script src="~/Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function () {
var getGuid = function () {
var inArg = {
arg: "GuidValue"
}
var settings = {
type: "POST",
url: "/default.aspx/DoMethod",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(inArg),
dataType: "json"
};
settings.success = function (result) {
$("#output").text(result.d.GuidValue);
};
$.ajax(settings);
}
$("#btnNewGuid").click(function () {
getGuid();
});
});
</script>
<h2>
Welcome to ASP.NET!
</h2>
<p>
GUID: <span id="output"></span> <button type="button" id="btnNewGuid">New</button>
</p>
<p>
To learn more about ASP.NET visit <a href="http://www.asp.net" title="ASP.NET Website">www.asp.net</a>.
</p>
<p>
You can also find <a href="http://go.microsoft.com/fwlink/?LinkID=152368&clcid=0x409"
title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
</p>
</asp:Content>
정말 간단하죠? ^^
참고로, 예제에서는 Dictionary 타입을 반환하고 있는데 WebMethod 특성이 부여되는 정적 메서드의 시그니처 형식에 제약은 없습니다.
(
첨부된 파일은 위의 코드를 포함한 간단한 프로젝트입니다.)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]