태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

[ASP.NET 3.5 / AJAX]
올바른 JavaScript 작동을 위한 ScriptManager 컨트롤이 포함된 ASP.NET 페이지 작성

모든 웹 개발이 그러하듯 서버(server) 측 코드 뿐만 아니라 클라이언트(client) 측 코드 역시 매우 많이 필요하고 활용됩니다.
ASP.NET 웹 개발시 자주 사용되는 클라이언트 스크립트인 JavaScript는 매우 강력하고 많은 웹 개발자 및 웹 전문가들이 오래 전부터 사용해 온 클라이언트 측 스크립트 코드라고 해도 과언이 아닐 것입니다.

본 문서에서는 ASP.NET AJAX 서버 컨트롤 - ScriptManager 컨트롤을 포함하는 ASP.NET 페이지 작성시 올바른 JavaScript 작동을 위한 필수적인 설정에 대해 안내합니다.
**주의 : 본 문서는 ASP.NET 3.5 버전을 기준으로 설명, 작성되었습니다.

  

ASP.NET 페이지 지시자 설정
Configure your ASP.NET Page Directives
작성하려는 ASP.NET 페이지가 AJAX 기능을 요구하지 않거나, ScriptManager 컨트롤이 포함되어있지 않는 비 AJAX 페이지라면 올바른 JavaScript 작동을 위해 추가적인 ASP.NET 페이지 지시자 작성을 할 필요는 없습니다.

    1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestDriver.aspx.cs" Inherits="TestDriverAspx"

    2     Async="true" ValidateRequest="false" EnableEventValidation="false"


먼저, ASP.NET AJAX 페이지에 위의 3가지 페이지 지시자를 추가하거나 설정합니다.
Async="true"
ValidateRequest="false"
EnableEventValidation="false"


[참고] ASP.NET 페이지 지시자에 대한 자세한 설명은 MSDN - 지시문 구문 문서를 참고하십시오.

  

JavaScript 클라이언트 스크립트 실행을 위한 ASP.NET 서버 코드 작성
Write server-side code to run the client script; JavaScript on ASP.NET AJAX page

ASP.NET 페이지에 대한 설정은 끝났습니다.
이제 실제적으로 실행될 JavaScript의 코드만 작성하면 됩니다.
비 AJAX ASP.NET 페이지를 작성하는 경우, 이 과정은 참고만 하십시오.
ASP.NET 서버 코드로 클라이언트 스크립트를 실행하는 방법을 이 과정에서 소개할 것입니다.
먼저, 다음의 코드를 살펴보십시오.

[코드 1] JavaScript 클래스 (C#)

    1 using System;

    2 using System.Collections.Generic;

    3 using System.Linq;

    4 using System.Web;

    5 

    6 using System.Text;

    7 using System.Web.UI;

    8 

    9 /// <summary>

   10 /// 자바스크립트 클래스

   11 /// </summary>

   12 public class JavaScript : IDisposable

   13 {

   14     /// <summary>

   15     /// 소멸자 호출 여부

   16     /// </summary>

   17     private bool IsDisposed;

   18 

   19     private Page m_SourceDocument;

   20 

   21     /// <summary>

   22     /// 소스 코드 문자열 처리기

   23     /// </summary>

   24     private StringBuilder sb;

   25 

   26     /// <summary>

   27     /// 자바스크립트 소스 코드가 포함될 Page 객체

   28     /// </summary>

   29     public Page SourceDocument

   30     {

   31         get

   32         {

   33             return m_SourceDocument;

   34         }

   35     }

   36 

   37     /// <summary>

   38     /// 비동기 여부 (AJAX 페이지인 경우, 값은 true 입니다.)

   39     /// </summary>

   40     public bool IsAsynchronous

   41     {

   42         get

   43         {

   44             return m_SourceDocument.IsAsync;

   45         }

   46     }

   47 

   48 

   49 

   50     /// <summary>

   51     /// 기본 생성자

   52     /// </summary>

   53     /// <param name="TargetPage">자바스크립트 소스 코드가 포함될 대상 페이지</param>

   54     public JavaScript(Page TargetPage)

   55     {

   56         sb = new StringBuilder();

   57 

   58         m_SourceDocument = TargetPage;

   59     }

   60 

   61     /// <summary>

   62     /// 기본 소멸자

   63     /// </summary>

   64     ~JavaScript()

   65     {

   66         if (IsDisposed == false)

   67         {

   68             Dispose(true);

   69         }

   70 

   71         Dispose(false);

   72     }

   73 

   74     /// <summary>

   75     /// Dispose 소멸자

   76     /// </summary>

   77     /// <param name="isDisposing">Dispose 소멸 로직 실행 여부</param>

   78     protected virtual void Dispose(bool isDisposing)

   79     {

   80         if (isDisposing == true)

   81         {

   82             // Dispose-time Code

   83             if (sb != null)

   84             {

   85                 sb = null;

   86             }

   87 

   88             if (m_SourceDocument != null)

   89             {

   90                 m_SourceDocument.Dispose();

   91             }

   92 

   93             IsDisposed = true;

   94         }

   95         else

   96         {

   97             // Finalize-time Code

   98         }

   99     }

  100 

  101     /// <summary>

  102     /// Dispose 소멸자

  103     /// </summary>

  104     public void Dispose()

  105     {

  106         if (IsDisposed == false)

  107         {

  108             Dispose(true);

  109             GC.SuppressFinalize(this);

  110         }

  111     }

  112 

  113 

  114 

  115     /// <summary>

  116     /// 자바스크립트 태그를 생성합니다.

  117     /// </summary>

  118     /// <param name="sourceCode">자바스크립트 소스 코드</param>

  119     private void GenerateJavaScriptTag(string sourceCode)

  120     {

  121         if (sb.Length > 0)

  122         {

  123             sb.Remove(0, sb.Length);

  124         }

  125 

  126         sb.AppendLine("<script charset=\"UTF-8\" language=\"javascript\" type=\"text/javascript\">");

  127         sb.AppendLine("<!--");

  128         sb.AppendLine(@sourceCode);

  129         sb.AppendLine("-->");

  130         sb.AppendLine("</script>");

  131     }

  132 

  133 

  134 

  135     /// <summary>

  136     /// 지정한 URL로 페이지를 이동합니다.

  137     /// </summary>

  138     /// <param name="TargetUri">이동할 URL 주소를 포함하는 Uri 객체</param>

  139     public void RedirectToURL(Uri TargetUri)

  140     {

  141         GenerateJavaScriptTag("\tlocation.href = \"" + TargetUri.AbsoluteUri + "\";");

  142 

  143         if (IsAsynchronous == false)

  144         {

  145             SourceDocument.ClientScript.RegisterStartupScript(SourceDocument.GetType(), "JSRedirectToURL", sb.ToString(), false);

  146         }

  147         else

  148         {

  149             ScriptManager.RegisterStartupScript(SourceDocument, SourceDocument.GetType(), "JSRedirectToURL", sb.ToString(), false);

  150         }

  151     }

  152 

  153     /// <summary>

  154     /// 지정한 URL로 페이지를 이동합니다.

  155     /// </summary>

  156     /// <param name="TargetURL">이동할 URL 주소 문자열</param>

  157     public void RedirectToURL(string TargetURL)

  158     {

  159         GenerateJavaScriptTag("\tlocation.href = \"" + TargetURL + "\";");

  160 

  161         if (IsAsynchronous == false)

  162         {

  163             SourceDocument.ClientScript.RegisterStartupScript(SourceDocument.GetType(), "JSRedirectToURL", sb.ToString(), false);

  164         }

  165         else

  166         {

  167             ScriptManager.RegisterStartupScript(SourceDocument, SourceDocument.GetType(), "JSRedirectToURL", sb.ToString(), false);

  168         }

  169     }

  170 

  171     /// <summary>

  172     /// 메시지 박스를 출력합니다..

  173     /// </summary>

  174     /// <param name="Message">메시지 내용</param>

  175     public void ShowAlertMessageBox(string Message)

  176     {

  177         GenerateJavaScriptTag("\talert(\"" + @Message + "\");");

  178 

  179         if (IsAsynchronous == false)

  180         {

  181             SourceDocument.ClientScript.RegisterClientScriptBlock(SourceDocument.GetType(), "JSAlertMessageBox", sb.ToString(), false);

  182         }

  183         else

  184         {

  185             ScriptManager.RegisterClientScriptBlock(SourceDocument, SourceDocument.GetType(), "JSAlertMessageBox", sb.ToString(), false);

  186         }

  187     }

  188 }


본 문서의 작성자는 자주 사용되는 JavaScript 코드를 미리 포함하는 유틸리티 클래스인 JavaScript 클래스를 C#으로 작성해두었습니다.
눈치가 있는 ASP.NET 개발자라면 서버 코드로 어떻게 클라이언트 스크립트를 호출하고 실행할 수 있는지 알 수 있을 것입니다.
[표 2] ASP.NET - 동기 페이지와 비동기 페이지의 클라이언트 스크립트 서버 코드 비교
동기 페이지 (비 AJAX) Page.ClientScript.RegisterClientScriptBlock(type, string, string, bool);
비동기 페이지 (AJAX) ScriptManager.RegisterClientScriptBlock(Page, type, string, string, bool);

[참고] Page.ClientScript 속성 - ClientScriptManager 클래스에 대한 자세한 설명은 MSDN - ClientScriptManager 클래스 문서를 참고하십시오.
[참고] ScriptManager 클래스에 대한 자세한 설명은 MSDN - ScriptManager 클래스 문서를 참고하십시오.
[참고] ScriptManager를 이용한 ASP.NET AJAX 개발에 대한 MSDN Magazine 기사 내용을 보려면 여기를 누르십시오.

  

문서 키워드
Keywords for this Document
개발, 프로그래밍, .NET, ASP.NET, AJAX, C#, ClientScriptManager, JavaScript, ScriptManager, Web Form, MSDN, 참고문서
  • 작성자 / 게시자 주소 Publisher URL : Essayer (http://www.essayer7.com)
  • 문서언어 Language : 한국어 Korean
  • 문서일자 : 2009년 06월 22일 (대한민국 표준시 GMT+09:00)
  • 문서버전 : 1.0.1109
  • 적용범위 : Microsoft ASP.NET 3.5 / AJAX 를 이용한 웹 개발, Microsoft Visual Studio 2008 (옵션)
  • 저작권 정보 :
    - 본 문서의 작성 권한 및 저작권은 작성자에게 있습니다.
  • 본 문서에 대한 의견 및 잘못된 정보에 대한 이의 제기 사항 등 여러분의 의견을 제안해주시기 바랍니다.
    게시자는 여러분의 의견을 소중하게 생각합니다.
    이의 제기를 할 경우에는 보다 정확한 정보 제공을 위해 객관적 근거 자료를 제시하면서 제기하여 주실 것을 권장합니다.
  • 본 문서에 사용된 일부 요소(이미지, 사운드, 동영상, 기타 첨부 문서 등)의 저작권은 해당 저작권자가 소유하고 있습니다.
    따라서, 문서의 무단 복제 및 전제, 변형 게시를 금지하며 이런 행위로 인해 발생되는 모든 법적 불이익 및 사건에 대한 모든 책임은 무단 행위자 본인에게 있음을 알려드립니다.

Copyright© 2008-2009 All rights reserved. 모든 권한 소유. 무단 복사 및 수정 금지 / 출처 명시 없는 재배포 금지

Posted by Essayer

Trackback URL :: http://www.essayer7.com/trackback/144 관련글 쓰기