'프로그래밍/ASP.NET'에 해당되는 글 7건

  1. 2009/10/07 [메일발송] Gmail, Live SMTP를 이용한 메일 발송 (4)
  2. 2009/10/06 [웹 에디터] Xquared 에디터 붙이기!!
  3. 2009/02/01 OpenID를 이용한 로그인
  4. 2008/10/02 [ASP.NET 2.0] AdRotator Control 써보자
  5. 2008/03/12 [ASP.NET 2.0] Page클래스 새로운 속성

[메일발송] Gmail, Live SMTP를 이용한 메일 발송

프로그래밍/ASP.NET 2009/10/07 15:08

 보통 서버에 SMTP 설치/설정해서 .NET에서 지원하는 SmtpClient객체를 이용해서 메일을 보냈을 것 이다. 이렇게 해도 메일을 발송하는데는 별 문제가 없다. 하지만, 간혹 메일을 보내면 포탈사이트 메일을 사용하는 사용자들에게는 스펨으로 빠지는 경우가 있다. 그 이유는 메일보내는 도메인이 화이트리스트에 등록이 안되있어서 그런데 이를 해결하기 위해서는 KISA RBL에 등록을 해야한다. (자세한 내용은 사이트를 확인 바람.) 아무튼 귀찮은 작업이다. 

 이를 간단하게 해결하는 방법으로 Gmail과 Live(둘중 선택) SMTP를 이용하면 될 것이다. Gmail과 Live는 외부에서 접근이 가능하게 SMTP주소와 포트를 오픈해 놨다. 그래서 간단하게 예제 소스를 만들어 봤다. 

 Visual Studio를 이용해서 웹프로젝트를 하나 생성해서 Default.aspx에 아래 코드를 작성해 보자.

Default.aspx

<body>

    <form id="form1" runat="server">

    <div>

        ㅁ 메일 작성!!<br />

        <br />

        SMTP 선택 :

        <asp:DropDownList runat="server" ID="ddlSmtpList">

            <asp:ListItem Text="Gmail" Value="1" />

            <asp:ListItem Text="Live" Value="0" />

        </asp:DropDownList>

        <br />

        받는 사람 :

        <asp:TextBox runat="server" ID="txtToMailAddress" /><br />

        제목 :

        <asp:TextBox runat="server" ID="txtTitle" Style="width: 560px" /><br />

        <asp:TextBox runat="server" ID="txtBody" Style="width: 600px; height: 400px;" TextMode="MultiLine" /><br />

        <asp:Button runat="server" ID="btnSend" OnClick="btnSend_Click" Text="전송" />

    </div>

    </form>

</body>


간단한 코드다. Gmail 또는 Live SMTP를 사용지에 대한 DropDownList와 수신자 메일을 지정할 텍스트박스, 제목을 적을 텍스트박스, 내용을 적을 텍스트박스 그리고 전송위한 버튼...간단하게 5개 컨트롤들을 지정해 봤다. 그럼 .cs 코드를 보자.

Default.aspx.cs

        /// <summary>

        /// Live smtp서버 주소

        /// </summary>

        private const string LIVESMTP_SERVER = "smtp.live.com";

 

        /// <summary>

        /// Gmail smtp서버 주소

        /// </summary>

        private const string GMAILSMTP_SERVER = "smtp.gmail.com";

 

        /// <summary>

        /// SMTP포트

        /// </summary>

        private const int SMTPPORT = 587;

 

        protected void Page_Load(object sender, EventArgs e)

        {

        }

 

        /// <summary>

        /// 전송버튼 이벤트

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        protected void btnSend_Click(object sender, EventArgs e)

        {

            MailAddress from = new MailAddress()

            {

                Email = "kdw8751@gmail.com",

                DisplayName = "Dongwook"

            };

 

            MailAddress to = new MailAddress()

            {

                Email = txtToMailAddress.Text

            };

 

            bool isGmail = ddlSmtpList.SelectedValue == "1" ? true:false;

 

            SendMail(txtTitle.Text, txtBody.Text, to, from, isGmail);

        }

 

        /// <summary>

        /// 메일을 발송합니다.

        /// </summary>

        /// <param name="title">제목</param>

        /// <param name="body">내용</param>

        /// <param name="to">수신자</param>

        /// <param name="from">발신자</param>

        /// <param name="isGmail">Gmail Smtp 여부</param>

        private void SendMail(string title, string body, MailAddress to, MailAddress from, bool isGmail)

        {

            // SmtpClient 변수 선언

            SmtpClient smtp;

 

            if (isGmail)

            {

                smtp = new SmtpClient(GMAILSMTP_SERVER, SMTPPORT);

                // Gmail메일 ID/ Password 지정

                smtp.Credentials = new NetworkCredential("Gmail아이디@gmail.com", "Gmail Password");

            }

            else

            {

                smtp = new SmtpClient(LIVESMTP_SERVER, SMTPPORT);

                // Live메일 ID/ Password 지정

                smtp.Credentials = new NetworkCredential("Live아이디@live.com", "Live Password");

            }

 

            smtp.DeliveryMethod = SmtpDeliveryMethod.Network;

            smtp.EnableSsl = true;

 

            MailMessage message = CreateDefaulMailMessage(from, to, title, body);

            object userState = message;

 

            // 비동기 이벤트

            smtp.SendCompleted += new SendCompletedEventHandler(smtp_SendCompleted);

            // 비동기 호출

            smtp.SendAsync(message, userState);

            // 동기호출

            //smtp.Send(message);

        }

 

        /// <summary>

        /// 비동기 호출 이벤트

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        void smtp_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)

        {

            if (e.Error != null)

                return;

        }

 

        /// <summary>

        /// 기본적인 메일 메세지를 생성하여 반환합니다.

        /// </summary>

        /// <param name="from">발신자 이메일</param>

        /// <param name="to">수신자 이메일</param>

        /// <param name="subject">메일 제목</param>

        /// <param name="body">메일 본문</param>

        /// <returns>메일 메세지 객체</returns>

        private MailMessage CreateDefaulMailMessage(MailAddress from, MailAddress to, string subject, string body)

        {

            // 메일 메세지 객체 생성

            MailMessage message = new MailMessage();

 

            //// 보내는 사람

            message.From = from.ConvertToBuiltInMailAddress();

 

            // 수신자 지정합니다.

            message.To.Add(to.ConvertToBuiltInMailAddress());

 

            // 제목 인코딩

            message.SubjectEncoding = System.Text.Encoding.UTF8;

            // 제목

            message.Subject = subject;

 

            // 본문 인코딩

            message.BodyEncoding = System.Text.Encoding.UTF8;

            // 본문

            message.Body = body;

 

            // HTML 허용

            message.IsBodyHtml = true;

 

            // 우선순위

            message.Priority = MailPriority.Normal;

            return message;

        }

    }

 

    /// <summary>

    /// 메일 정보

    /// </summary>

    public class MailAddress

    {

        /// <summary>

        /// 메일주소를 지정/반환합니다.

        /// </summary>

        public string Email { get; set; }

 

        /// <summary>

        /// 이름을 지정/반환합니다.

        /// </summary>

        public string DisplayName { get; set; }

 

        /// <summary>

        /// 빌트인 MailAddress 객체를 만들어 반환합니다.

        /// </summary>

        /// <returns></returns>

        public System.Net.Mail.MailAddress ConvertToBuiltInMailAddress()

        {

            return new System.Net.Mail.MailAddress(this.Email, this.DisplayName);

        }

    }


위 코드에서 주석을 보면서 보면 이해하기 쉬울것 이다. 내용을 다 입력한후 전송버튼을 클릭하면 btnSend_Click로 이벤트로 들어 올것이다. 여기서 드롭다운리스트에서 선택되어 있는 SMTP주소를 지정한다. 그리고 제목, 내용, 수진자지정, 보낸 사람지정후 메일을 보내진다. 코드는 아주 간단하다. 실행해 보면 잘 될 것이다. (소스는 버리기 아까우니 첨부파일로 올려놓겠다.)

주요 내용은 Live SMTP주소가 smtp.live.com 이고, Gmail SMTP주소는 smtp.gmail.com 이다. 포트는 둘다 587로 되어 있다. 그리고 메일을 보내기 위해서는 Live, Gmail 계정이 반드시 있어야 한다. 

참고 )
Live SMTP를 이용하면 메일을 발송할수 있는 건수가 제한이 되어 있다. 총 몇건인지 자세히 알아 보진 않았지만... 테스트로 20건 정도 반복해서 보내봤는데... 계정이 막혀버렸다. 그래서 Live에 다시 직접 로그인해서 풀어줘야하는 번거로운이 있엇다.  그에 비해 Gmail은 계정이 막히거나 그러지 않았다. Gmail의 메일 발송 한도는 아래 링크를 확인 하기 바란다.
(http://mail.google.com/support/bin/answer.py?hl=ko&answer=22839)


저작자 표시 비영리 변경 금지
Trackback 0 : Comments 4

[웹 에디터] Xquared 에디터 붙이기!!

프로그래밍/ASP.NET 2009/10/06 23:34

 웹개발을 하다보면 간혹 에디터를 붙어야 하는 경우가 생긴다. 그럼 개발자는 어떤 에디터를 사용할까 많이들 고민할 것 이다. 나 또한 그랬으니깐

 그래서 내가 예전에 사용해서 봤던 Xquared를 이용해서 웹사이트에 전용시키는 방법을 공유하려한다. 이는 초보개발자들이 웹에디터를 적용할 때 도움이 되는 문서가 되지 않을까 싶다.

 

Xquared자바스크립트로만 작성되어 있어서 별도의 소프트웨어를 설치 필요가 없고, XHTML표준을 따르는 문서를 만들어 주며, 다양한 확장점을 통해 원하는 기능을 쉽게 추가할 수 있도록 구현되어 있다.

 

Xquared 소개에 보면 위와 같이 설명되어 있다. 자세한 소개는 Xquared에서 확인해 보길 바란다.

 

이제 사이트에 어떻게 적용할지 하나하나 확인 해보자!

! 적용하기전에 먼저 에디터를 다운로드 받도록 한다. 다 받았다면 Visual Studio에서 웹프로젝트를 하나 만들도록 한다.

사용자 삽입 이미지

[그림 1]

Xquared_Editor라는 이름의 웹프로젝트를 하나 생성했다. 새로 생성하면 아마도 위 그림과 같은 모습일 것이다. 그렇다면 이제 아까 다운받았던 Xquared 에디터에서 images, javascripts, stylesheets 폴더를 프로젝트에 추가하자!!

사용자 삽입 이미지

[그림 2]

자 그럼 위 그림과 같이 구성이 되었을 것이다. 그럼 이제 에디터 설정을 하면 된다. 그럼 간단하게 Default.aspx파일에 스크립트 설정을 해보자. (물론 테스트 파일을 열어서 확인해도 편할것이다.)

Default.aspx

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

    <!-- style  -->

    <link rel="stylesheet" type="text/css" href="/stylesheets/xq_ui.css" />

    <!-- script  -->

 

    <script type="text/javascript" src="/javascripts/XQuared.js?load_others=1"></script>

 

    <script type="text/javascript" src="/javascripts/plugin/FileUploadPlugin.js"></script>

   

    <!-- xed 에디터 생성 스크립트 -->

    <script type="text/javascript">        //<![CDATA[

        var xed;

 

        window.onload = function() {

            xed = new xq.Editor("xqEditor");

 

            xed.setEditMode('wysiwyg');

            xed.setWidth("100%");

        };

        //]]>

</script>

 

</head>

<body>

    <form id="form1" runat="server">

    <div style="width:700px;">

        <!-- 내용이 전달될 textarea  -->

        <textarea id="xqEditor" name="xqEditor"></textarea>

    </div>

    </form>

</body>

</html>

 

스크립트 이벤트인 onload 이벤트 Xquared 에디터를 생성하는 것이 보일 것이다. 위와 같이 간단한 코드로 Xquared 에디터를 붙일수 있다. 지금은 테스트로 Default.aspx 페이지에 붙였지만, 실제 개발한때는 UserControl이나, Control로 잘만들어 놓으면 쓰기 편한 것 이다.


사용자 삽입 이미지

[그림 3 실행모습]

그럼 이제 Validation 체크관련 해서 알아보도록 하겠다. 테스트를 위해 버튼을 하나 만들어 보자. 

 

Default.aspx

function Validation() {

            alert(xed.getCurrentContent(true));

        }

<!-- 중복 코드 생략  -->

<input type="button" value="체크" onclick="Validation();" />

위 코드와 같이 간단하게 만들어 봤다. 버튼을 클릭하면 Validation라는 스크립트 함수를 호출하도록하고, Validation함수에서는 getCurrentContent함수를 통해 에디터의 내용을 반환해서 메세지를 뿌려주는 것이다. (getCurrentContent true를 주면 full-validation 수행된다.)


사용자 삽입 이미지

[그림 4]

위 그림은 실행 모습이다. 이를 이용해서 Validation 체크를 하면 될 것이다.

 

자 그럼 이제 이미지 업로드 설정에 대해서 알아 보도록 하자. 지금 툴바에는 이미지 업로드 버튼이 안보일 것이다. 이는 에디터 생성할 때 설정을 해주어야 한다.

 

Default.aspx

window.onload = function() {

            xed = new xq.Editor("xqEditor");

 

            xed.isSingleFileUpload = true;

            xed.addPlugin('FileUpload');

            xed.setFileUploadTarget('/ImageUpload.aspx', null);

            xed.setEditMode('wysiwyg');

            xed.setWidth("100%");

 

위 코드를 보면 isSingleFileUpload, addPlugin, setFileUploadTarget 이 세가지 함수가 추가로 설정되어 있다. isSingleFileUpload는 한 개 파일 업로드를 하겠다고 설정한 것이다. (다중 파일업로드는 Xquared 사이트에서 확인 해보기 바란다. 지금은 SingleFileUpload에 관련해서만 설명하도록 하겠다.) addPlugin() 메소드를 사용해서 플러그인을 xed에 추가한다. setFileUploadTarget()메소드는 파일 업로드할 페이지를 지정한다. 그래서 난 ImageUpload.aspx라는 페이지를 하나 생성해서 추가해 두었다. 그럼 이제 ImageUpload 페이지에 파일 업로드 코드를 작성하도록 하자.

 

먼저 스크립트를 추가 한다.

 

ImageUpload.aspx

<script type="text/javascript">        //<![CDATA[

        window.onload = function() {

 

            if (window.parent.xed) {

                window.parent.xed.fileUploadListener.onSuccess('<%= FileName %>','');

            }

        }

//]]></script>

 

스크립트는 간단하다 부모의 xed객체의 onSuccess메소드를 호출해 주는 것이다. 여기서 파일이름을 같이 전달해준다.

 

ImageUpload.aspx.cs

/// <summary>

        /// 파일 이름을 지정/반환합니다.

/// </summary>

protected string FileName { get; set; }

 

        protected void Page_Load(object sender, EventArgs e)

        {

            Save();

        }

 

        /// <summary>

        /// 파일을 저장합니다.

        /// </summary>

        private void Save()

        {

            // 에디터에서 표시될 이미지 경로

            string _imagehost = string.Format("http://{0}/FileUpload", Request.ServerVariables["HTTP_HOST"]);

            // 이미지 파일 저장 경로

            string UPLOADPATH = Server.MapPath("FileUpload");

 

            // 정상적으로 처리가 되었는지 여부

            bool isSuccess = false;

            // 이미지 지정 경로

            string imgPath = "";

 

            // 업로드 파일이 존재 여부 확인

            if (Request.Files.Count <= 0)

            {

                // Error 출력

                Message(isSuccess, imgPath, "Error");

                return;

            }

 

            // HttpPostedFile 인스턴스 생성

            HttpPostedFile file = Request.Files[0];

            // 파일 이름을 반환합니다. [고유한 파일명 반환]

            FileName = GetName(file.FileName);

 

            // 파일 이름이 null이면 error

            if (string.IsNullOrEmpty(FileName) == true)

            {

                Message(isSuccess, imgPath, "Error");

                return;

            }

 

            // 파일 저장합니다.

            file.SaveAs(Path.Combine(UPLOADPATH, FileName));

            // 정상처리

            isSuccess = true;

            // 에디터에서 보여질 경로 지정.

            imgPath = String.Format("{0}/{1}", _imagehost, FileName);

 

            // 메세지 출력

            Message(isSuccess, imgPath, "");

        }

 

        /// <summary>

        /// 메세지를 반환합니다.

        /// </summary>

        /// <param name="isSuccess"></param>

        /// <param name="fileUrl"></param>

        /// <param name="errorMessage"></param>

        public void Message(bool isSuccess, string fileUrl, string errorMessage)

        {

            string result = string.Format(" success:{0}, file_url:'{1}', message:'{2}' ", isSuccess.ToString().ToLower(), fileUrl, errorMessage);

            this.body1.InnerHtml = "{" + result + "}";

        }

 

        /// <summary>

        /// 파일 이름을 반환합니다.

        /// </summary>

        /// <param name="fileName"></param>

        /// <returns></returns>

        public string GetName(string fileName)

        {

            // 불필요한 파일 이름 삭제

            int lastCount = fileName.LastIndexOf(".");

            string fileType = fileName.Substring(lastCount, (fileName.Length - lastCount)).ToLower();

            string saveFileName = string.Empty;

 

            // 해당 type이 아니면 null 반환

            if (fileType == ".jpg" || fileType == ".gif" || fileType == ".png")

            {

                // 고유할수 있도록 간단하게 DateTime.Now.Ticks 사용함.

                saveFileName = DateTime.Now.Ticks.ToString() + fileType;

            }

 

            return saveFileName;

        }

 

.cs 코드는 따로 설명이 필요 없도록 코드에 주석을 달아 놨다. 이렇게까지 해서 Xquared 에디터 붙이기 성공을 했다. 간단하게 예제를 실행해 보고 파일이 정상적으로 폴더에 들어 갔는지 확인해 보자!!

 

[그림 5 Image 버튼 클릭후 파일 선택 모습]

 

[그림 6 Insert버튼 클릭후 모습]

 

[그림 7 저장파일]

 

정상적으로 잘 작동하는 것 같다~^^

이 프로젝트 소스는 첨부파일로 같이 올려 놓아요!

저작자 표시 비영리
Trackback 0 : Comment 0

OpenID를 이용한 로그인

프로그래밍/ASP.NET 2009/02/01 02:19

몇일전 회사에서 Silverlight를 이용해서 로그인 처리를 하고, 로그인에 대한 정보를 Silverlight에서 받을수 있도록 하는 간단한 샘플프로젝트를 해보라는 미션을 받게 되었습니다. 단, OpenID를 입력받아서 사용자 정보를 받아야 하는 것 이었습니다. 그래서 이래저래 Google링하는 도중 좋은 정보들을 찾을 수 있어서 공유하기 위한 목적으로 이렇게 포스팅 해봅니다.^^

OpenID란?

  OpenID란 간단하게 얘기하자면, 하나의 아이디로 여러 웹사이트에 로그인하기 위한 서비스라고 생각하시면 되겠습니다. 즉, 웹사이트에 따로 복잡한 회원가입 절차가 없이도, OpenID를 지원하다면 로그인을 할수 있도록 하는 것이지요.
 OpenID를 보시면 URL 주소로 되어 있는데요, 그것이 나만의 아이디로 쓰이게 되고요, 이미 가지고 계신 블로그나 홈피주소를 아이디로 쓸 수도 있어요.
 OpenID를 지원하는 웹사이트에 로긴하기 위해서는, 단지 사용자의 OpenID URL만 입력하면 되고요, 그럼 그 웹사이트에서는 인증을 위해 사용자의 OpenID를 제공하는 서버로 요청을 보냅니다. 그리고 인증이 끝나면 사용자 정보를 요청한 사이트에 인증된 사용자정보를 보내주므로서 로그인처리가 되는 것이지요.
OpenID더 궁금하신 내용이 있다면 아래 링크를 참고 하세요.

OpenID한국판사이트
OpenID적용된사이트목록


OepnID 적용해 보기

 먼저 OpenID가 없으신 분이라면, myID.net에서 만드시면 되겠습니다. (myID.net서비스에 대해 궁금하신 분들은 를 참고해서 보세요.)

 OpenID를 만드셨다면 이제 Visual Studio를 이용해 웹프로젝트를 하나 생성하도록 하겠습니다. 프로젝트를 만드셨다면 이제 .NET 기반의 OpenID공개 소스인 ExtremeSwank Library(ExtremeSwank OpenID)와 컨트롤 예제(ExtremeSwank OpenIDControl User Control)를 다운받도록 합니다.

로드

(ExtremeSwank Library .NET2.0기반으로 개발되어 있지만,3.0에서도 사용 가능하며, OpenID1.1 2.0을 모두 지원하고 있다는 장점도 가지고 있습니다.)

 

이렇게 두개의 파일을 다 받으셨다면 ExtremeSwank.OpenId.dll를 프로젝트에 추가 하시고, 컨트롤 파일을 추가해주시면 간단한 예제 프로젝트가 완성이 됩니다. 저 같은 경우 아래 그림과 같이 구성해 보았습니다.

 

사용자 삽입 이미지

 

간단하게 MasterPage, UserControls 폴더를 따로 만들어서 해당 파일들을 넣어주고 URL만 변경해 주었지요. 이제 한번 실행해 보도록 하지요.

그림1.

사용자 삽입 이미지

그림2.
사용자 삽입 이미지
(위 그림에서 drum83.myid.net는 제 OpenID입니다.^^;;;)

그림3.
사용자 삽입 이미지
(요청한 사이트가 등록이 되어 있지 않다면 비밀번호를 입력해야 합니다.)

그림4.
사용자 삽입 이미지
(비밀번호를 입력하게 되면, 자신의 정보를 보여지게되고, 승인할것인지, 이번만 승인할것인지를 사용자가 직접 결정을 하게됩니다.)

그림5.
사용자 삽입 이미지
(이렇게 사용자가 인증을 하게되면 위와같이 해당 정보를 요청한사이트에 콜백해주게 됩니다.)

 ExtremeSwank Library를 이용하면 간단하게 OpenID를 적용할수가 있으며, 지금 사용한 컨트롤만 웹사이트에 맞게 커스터마이징하시면 쉽게 OpenID를 적용한 웹사이트를 만들수 있을 거예요. 그리고 아래 주소를 가고시면  ExtremeSwank Library 문서도 MSDN같이 잘나와 있어서 적용하는데 큰 무리는 없을 듯 해요.
ExtremeSwank Library 문서

위에 만든 예제파일도 첨부했으니 받아보실분은 다운로드 받으세요~^^




Trackback 0 : Comment 0

[ASP.NET 2.0] AdRotator Control 써보자

프로그래밍/ASP.NET 2008/10/02 14:00

AdRotator 컨트롤은 ??
 ASP.NET 웹 페이지에서 광고를 표시할 수 있는 것!!

사이트를 만들다 보면 광고이미지를 붙이는 경우가 많이 있을 것입니다. 그리고 그 광고 이미지가 매번
변경되게 하려면 여러므로 고생해서 코드를 짜야하는 삽질을 해야 할것 입니다.
ASP.NET에서는 AdRotator 컨트롤를 지원하고 있습니다.
 AdRotator 컨트롤은 일반적으로 XML파일,데이터 소스를 사용하여 광고 이미지, URL, 광고 정보를 자동으로 읽을수 있습니다. (물론, 정해진 규칙에 의해 작성해야 한다는거 잊으면 안됩니다.)

AdRotator 어떻게 사용하지 ??

그럼 이제 예제를 통해서 어떻게 사용되는지 보도록 하겠습니다. (후비~고~우~^^)
VS2005로 새로운 프로젝트를 만듭니다. 그리고 늘 그랬듯 .aspx 페이지 하나와 XML 파일 하나를 만들어 줍니다.

그럼 먼저 XML 파일을 보도록 하겠습니다.

 XML 파일

<?xml version="1.0" encoding="utf-8" ?>

<Advertisements>

  <Ad>

    <ImageUrl>~/AdRotatorControl/images/121392860807969400.jpg</ImageUrl>

    <!-- 이미지 경로 -->

    <NavigateUrl>http://www.naver.com</NavigateUrl>

    <!-- 이동할 페이지-->

    <AlternateText>10%할인</AlternateText>

    <!-- 이미지 제목-->

    <Keyword>shopping1</Keyword>

    <!-- 필터링 키워드 -->

    <Impressions>40</Impressions>

    <!-- 보여줄 횟수 비율값-->

  </Ad>

  <Ad>

    <ImageUrl>~/AdRotatorControl/images/121394570027333900.gif</ImageUrl>

    <NavigateUrl>http://www.daum.net</NavigateUrl>

    <AlternateText>20%할인</AlternateText>

    <Keyword>shopping1</Keyword>

    <Impressions>40</Impressions>

  </Ad>

  <Ad>

    <ImageUrl>~/AdRotatorControl/images/121394920519137200.jpg</ImageUrl>

    <NavigateUrl>http://www.gmarket.co.kr/</NavigateUrl>

    <AlternateText>30%할인</AlternateText>

    <Keyword>shopping2</Keyword>

    <Impressions>40</Impressions>

  </Ad>

  <Ad>

    <ImageUrl>~/AdRotatorControl/images/121444819075955200.gif</ImageUrl>

    <NavigateUrl>http://www.nate.com</NavigateUrl>

    <AlternateText>40%할인</AlternateText>

    <Keyword>shopping2</Keyword>

    <Impressions>40</Impressions>

  </Ad>

</Advertisements>


위 와같은 XML 구조로 짜줘야 합니다! 그래야 AdRotator 컨트롤이 자동으로 데이터를 읽게 됩니다.
위 주석을 보아도 알수 있겠지만 추가 설명을 드리자면 <Keyword> 는 특정페이지에서 특정한 이미지들만 보여지게 할때 사용할수 있습니다. AdRotator 컨트롤의 AdvertisementFile 속성 이용해서 말이지요. (사용 방법은 아래 있습니다.) <Impressions>이미지(광고)를 보여줄 비율값입니다.(이값이 크면 자주 보여지겠지요)
저는 위 XML파일 명을 TestXMLFile.xml 이라고 하고 저장했습니다. 그리고 네이버에서 이미지 4개를 찾아서
AdRotatorControl폴더 안에있는 images폴더에 넣어 두었습니다.

그럼 이제 .aspx페이지 코드를 어떻게 되어 있는지 보도록 하겠습니다.

 .aspx파일

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AdRotator.aspx.cs" Inherits="AdRotatorControl_AdRotator" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>제목 없음</title>

</head>

<body>

<form id="form1" runat="server">

<div style="width:189px; height:69px; background-color:Yellow;padding:2px 2px 2px 2px;">

<!--AdRotator 컨트롤 -->

<asp:AdRotator runat="server" ID="AdChangeImage" AdvertisementFile="~/AdRotatorControl/TestXMLFile.xml" />

</div>

</form>

</body>

</html>


정말 간다하지 않습니까~^^
AdRotator 컨트롤의 AdvertisementFile속성 XML파일의 경로를 가져오거나 설정합니다. 그리고 아까 위에서 말한 키위드(<Keyword>)는 AdRotator 컨트롤의 KeywordFilter속성 이용합니다. 이속성은 필터링하는 범주 키워드를 자져오거나 설정합니다. 사용법은 아래와 같습니다.

<asp:AdRotator runat="server" ID="AdChangeImage" KeywordFilter="shopping1" AdvertisementFile="~/AdRotatorControl/TestXMLFile.xml" />

 정말 간단하고 심플하지 않습니까?^^ 이제 한번 테스트 해보록 하겠습니다.
1. 그림

사용자 삽입 이미지


2. 그림
사용자 삽입 이미지


F5를 이용해서 계속 변경해 보세요~^^ 광고 이미지가 잘 바꿜것입니다.^^

참고 : [AdRotator 멤버] , [AdRotator 웹 서버 컨트롤 개요] <-- MSDN 링크 입니다.
Trackback 0 : Comment 0

[ASP.NET 2.0] Page클래스 새로운 속성

프로그래밍/ASP.NET 2008/03/12 02:52

ㅁ ASP.NET 2.0 Page클래스의 속성

공유 속성
속성 설명
AppRelativeVirtualPath 응용 프로그램과 관련된 페이지의 상대 경로(예: ~/default.aspx)
ClientQueryString 요청 Url에서 쿼리 문자열 부분(예: parm1=abc)
ClientScript 클라이언트 스크립트를 관리하는 ClientScriptManager 개체를 반환한다. ClientScriptManager 개체는 클라이언트와 서버가 교신하는데 필요한 스크립트를 관리하는 다양한 메서드를 제공한다.
CodePage (@ Page 지시자의 CodePage와 같다.(예: 65001)[닷프 전용])
ContentType (@ Page 지시자의 ContentType과 같다.(예 : text/html)[닷프전용])
Culture (@ Page 지시자의 Culture와 같다.(예 : Korea(Korea))[닷프전용]
EnableTheming 테마를 사용할지 여부
Form 페이지의 <form runat="server">태그(HtmlForm 개체)
Header 페이지의 <head runat="server">태그를 나타낸다.HtmlHead 형식을 반환한다.
IdSeparator 컨트롤의 UniqueID에 사용되는 문자, 이 속성의 값은 "$"이다. 읽기전용.
IsAsync 페이지가 비동기로 처리되는 중인지 여부
IsCallback 페이지 요청이 콜백 함수의 결과로 인한 것인지 여부
IsCrossPagePostBack 페이지 요청이 다른 페이지로부터 포스트백된 것인지 여부
Items 페이지 개체의 수명만큼 지속될 필요가 있는 개체를 저장한다.여기에 저장한 개체는 자식컨트롤에서 액세스할 수 있다.
LCID (@ Page 지시자의 LCID와 같다.[닷프전용]
MaintainScrollPositionOnPostBack 포스트백되는 동안 스크롤 위치를 유지하는지 여부. @ Page 지시자의 MaintainScrollPositionOnPostBack 특성과 같다.
Master 마스터 페이지의 개체를 가져온다.
MasterPageFile 마스터 페이지 이름을 설정하거나 가져온다. Prelnit에서만 이 속성을 설정할 수 있다.
PageAdapter 페이지를 요청한 브라우저와 연결되어 페이지의 동작을 재정의하는 PageAdapter 개체를 반환한다.
PreviousPage 이 페이지로 제어를 옮긴 페이지를 가져온다. Transfer메서드나 교차 포스트백 시 이속성이 설정된다. 그 외에는 null이다.
ResponseEncoding (@ Page 지시자의 ResponseEncoding과 같다.(예 : Unicode(UTF8))[닷프전용]
StyleSheetTheme 스타일시트 테마 이름. @ Page 지시자의 StyleSheetTheme 특성을 통해 지정할 수 있다.
Theme 페이지 테마 이름. @ Page 지시자의 Theme 특성을 통해 지정할 수 있다.
Title 페이지의 제목. @ Page 지시자의 Title 특성을 통해 지정할 수 있다.
TraceModeValue (@ Page 지시자의 TraceMode와 같다.[닷프전용])
TraceEnabled 추적이 가능한지 여부. @ Page 지시자의 Trace와 같다.[닷프전용]
UICulture 페이지와 연결된 스레드의 UI 아이디(예 :Korea(Korea))[닷프전용]
ViewStateEncryptionMode 뷰 상태를 인코딩하는 방법을 결정한다. Auto | Always | Never


보호 속성
속성 설명
AspCompatMode (@ Page 지시자의 AspCompat와 같다.[닷프전용]
MaxPageStateFieldLength 클라이언트로 전송되는 뷰 상태 필드의 최대 길이를 지정한다. 이 속성에 양수를 지정하면, 이 수의 크기에 따라 클라이언트로 출력되는 뷰 상태 필드가 나눠어 진다. 음수로 지정되면 나눠어지지 않는다. 기본 값은 -1 이다.
PageStatePersister PageStatePersister 개체를 반환한다. 이 개체는 뷰 상태 저장 처리의 하부 구조를 제공하는데 PageStatePersister 개체를 확장하면 기본 뷰 상태의 저장 방식을 변경할 수 있다. PageStatePersister를 상속한 개체는 HiddenFieldPageStatePersister 개체와SessionPageStatePersister 개체가 있다. HiddenFieldPageStatePersister는 뷰 상태를 관리하도록 기본적으로 선택된 개체이다. SessionPageStatePersister 개체는 세션에 뷰 상태를 저장한다.
UniqueFilePathSuffix 파일을 캐시하기 위해 파일 경로의 마지막에 붙이는 유일한 접미사를 반환한다. 특정 요청과 연결된 파일 경로를 식별하는데 사용한다.

위 내용중 [닷프전용]은 개발자가 변경하지 말라는 주의가 있는 속성들이다.쓰기를 자제하고 읽기 위주로 사용하는 것이 좋다.


                                               참고 서적 : ASP.NET 2.0  웹 프로젝트와 실전 프로그래밍
Trackback 0 : Comment 0