Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일

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&amp;clcid=0x409"
            title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
    </p>
</asp:Content>

정말 간단하죠? ^^

참고로, 예제에서는 Dictionary 타입을 반환하고 있는데 WebMethod 특성이 부여되는 정적 메서드의 시그니처 형식에 제약은 없습니다.

(첨부된 파일은 위의 코드를 포함한 간단한 프로젝트입니다.)




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 6/30/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... [121]  122  123  124  125  126  127  128  129  130  131  132  133  134  135  ...
NoWriterDateCnt.TitleFile(s)
10900정성태2/19/201622126.NET Framework: 548. Linq는 결국 메서드 호출! [3]파일 다운로드1
10899정성태2/17/201623424개발 환경 구성: 282. kernel32.dll, kernel32legacy.dll, api-ms-win-core-sysinfo-l1-2-0.dll [1]
10898정성태2/17/201621973.NET Framework: 547. PerformanceCounter의 InstanceName 지정 시 주의 사항파일 다운로드1
10897정성태2/17/201621282디버깅 기술: 76. windbg 분석 사례 - 닷넷 프로파일러의 GC 콜백 부하
10896정성태2/17/201622385오류 유형: 320. FATAL: 28000: no pg_hba.conf entry for host "fe80::1970:8120:695:a41e%12"
10895정성태2/17/201621242.NET Framework: 546. System.AppDomain으로부터 .NET Profiler의 AppDomainID 구하는 방법 [1]
10894정성태2/17/201621931오류 유형: 319. Visual Studio에서 찾기는 성공하지만 해당 소스 코드 정보가 보이지 않는 경우
10893정성태2/16/201620622.NET Framework: 545. 닷넷 - 특정 클래스가 로드되었는지 여부를 알 수 있을까? - 두 번째 이야기
10892정성태2/16/201621186오류 유형: 318. 탐색기에서 폴더 생성/삭제 시 몇 초 동안 멈추는 현상
10891정성태2/16/201624255VC++: 95. 내 CPU가 MPX/SGX를 지원할까요? [1]
10890정성태2/15/201624087.NET Framework: 544. C# 5의 Caller Info를 .NET 4.5 미만의 응용 프로그램에 적용하는 방법 [5]
10889정성태2/14/201620421.NET Framework: 543. C++의 inline asm 사용을 .NET으로 포팅하는 방법 - 두 번째 이야기파일 다운로드1
10888정성태2/14/201618730.NET Framework: 542. 닷넷 - 특정 클래스가 로드되었는지 여부를 알 수 있을까?
10887정성태2/3/201619430VC++: 94. MPX(Memory Protection Extensions) 테스트파일 다운로드1
10886정성태2/3/201620675개발 환경 구성: 281. Intel MPX Runtime Driver 수동 설치
10885정성태2/2/201620367오류 유형: 317. Sybase.Data.AseClient.AseException: The command has timed out.
10884정성태1/11/201621600개발 환경 구성: 280. 닷넷에서 SAP Adaptive Server Enterprise 데이터베이스 사용파일 다운로드1
10882정성태1/6/201620882Windows: 113. 윈도우의 2179, 26143, 47001 TCP 포트 사용 [1]
10881정성태1/3/201622270오류 유형: 316. 윈도우 10 - 바탕/돋음 체가 사라져 한글이 깨지는 현상 [2]
10880정성태12/16/201520011오류 유형: 315. 닷넷 프로파일러의 오류 코드 정보
10879정성태12/16/201521953오류 유형: 314. Error : DEP0700 : Registration of the app failed. error 0x80070005
10878정성태12/9/201525053디버깅 기술: 75. UWP(유니버설 윈도우 플랫폼) 앱에서 global::System.Diagnostics.Debugger.Break 예외 발생 시 대응 방법
10877정성태12/9/201529410VC++: 93. std::thread 사용 시 R6010 오류 [2]
10876정성태11/26/201525513.NET Framework: 541. SignedXml을 이용한 ds:Signature만드는 방법 [3]파일 다운로드1
10875정성태11/26/201530488개발 환경 구성: 279. signtool.exe의 다중 서명 기능 [2]
10874정성태11/26/201526459개발 환경 구성: 278. 인증서와 인증서를 이용한 코드 사인의 해시 구분
... [121]  122  123  124  125  126  127  128  129  130  131  132  133  134  135  ...