lecture Home > ASP.NET > Taeyo's ASP.NET

Taeyo's ASP.NET

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2006³â 02¿ù 04ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2006³â 02¿ù 06ÀÏ

   °­Á ÀÐÀ½ ¼ö : ȸ

   ÀÛ¼ºÀÚ : Taeyo(±è Å¿µ)
   ÆíÁýÀÚ : Taeyo(±è Å¿µ)

   °­Á Á¦¸ñ : À¥¿¡¼­ÀÇ ºñµ¿±â È£Ãâ : Ajax¿Í Ajax.NET

°­Á Àü Å¿ÀÀÇ Àâ´ã>

µåµð¾î ¸¹Àº ºÐµéÀÌ ±â´Ù¸®½Ã´ø Ajax(¿¡ÀÌÀ轺)¿¡ °ü°èµÈ À̾߱âÀÔ´Ï´Ù.
°­Á¸¦ ¾²¸é¼­ ÀÌ°Í Àú°Í »ìÆìº¸´Ùº¸´Ï, ±Û ¾²´Âµ¥¸¸ ÀÏÁÖÀÏ ÀÌ»óÀÌ °É·È³×¿ä.
ÇÏÇÏÇÏ...


Ajax¶õ?

¿¡ÀÌÀ轺(Ajax:Asynchronous JavaScript And XML) ±â¼úÀº 2005³â Á߹ݺÎÅÍ È­µÎ·Î ¶°¿À¸¥ À¥ ±â¹ÝÀÇ ºñ µ¿±â Åë½Å ±â¹ýÀ» ÀǹÌÇÏ´Â ¿ë¾îÀÔ´Ï´Ù. ÀÌ´Â Google Earth°¡ ¹ßÇ¥µÇ¸é¼­ »ç½Ç»ó ±ÞºÎ»óÇÑ ±â¼úÀ̱⵵ ÇÕ´Ï´Ù. À¥ »ó¿¡¼­ È­¸éÀÇ »õ·Î °íħ(refresh)¾øÀÌ ±×Åä·Ï ºü¸£°í, ±íÀÌ ÀÖ°Ô ¼¼°è Áöµµ¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù´Â °ÍÀº ½Ç·Î ³î¶ó¿òÀ̾úÀ¸´Ï±î¿ä. ÇØ¼­, Ajax°¡ À¥ »ó¿¡¼­ °í ÇØ»óµµÀÇ ±×·¡ÇÈ Áö¿øÀ» °¡´ÉÇÏ°Ô ÇÏ´Â ±â¼úÀ̶ó°í Âø°¢ÇÏ´Â »ç¶÷µéµµ ÀÖ¾ú°í, ÀÌ ±â¼úÀÌ ActiveX¸¦ ´ëüÇÒ ¼ö ÀÖ´Â ±â¼úÀ̶ó°í ¸»¾¸ÇÏ´Â ºÐµéµµ ÀÖ¾ú½À´Ï´Ù. ¾Æ¸¶µµ °¢°¢ÀÇ ±â¼úÀÌ »ç¿ëµÇ´Â ´ë»óÀ» Á¦´ë·Î ÀÌÇØÇÏÁö ¸øÇ߱⿡ »ý±ä ¿ÀÇØ°¡ ¾Æ´Ï¾ú³ª ½Í½À´Ï´Ù. ¹°·Ð, Á¼Àº °üÁ¡¿¡¼­ º¸¸é ¾ÆÁÖ Æ²¸° ¸»µµ ¾Æ´Ò µí ÇÕ´Ï´Ù¸¸.. ±×·¡µµ¡¦ Á» ¾Æ´Ñ µí Çѵ¥¡¦ À½¡¦

Ajax´Â ±× ¸íĪÀÌ ÀǹÌÇÏµí ´ÜÀÏ ±â¼úÀ̶ó±â º¸´Ù´Â ¿©·¯ ±â¼úÀ» Çϳª·Î ¹­Àº °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¸é, Javascrpt, XML µîÀÌ ¹Ù·Î ±×°Í¿¡ ÇØ´çÇÕ´Ï´Ù. Ajax´Â SOAP ¹× XML °°Àº Åë½Å ±â¼úÀ» »ç¿ëÇÏ¿© ºñ µ¿±â ¿äû/ÀÀ´äÀ» ¼­¹ö¿Í ÁÖ°í ¹ÞÀ¸¸ç, JavaScript, DOM, HTML ¹× CSS °°Àº ÇÁ·¹Á¨Å×ÀÌ¼Ç ±â¼úÀ» »ç¿ëÇÏ¿© ÀÀ´äÀ» ó¸®ÇÏ´Â ±â¼úÀÔ´Ï´Ù. ´Ù½Ã ¸»Çؼ­, "¼­¹ö·ÎÀÇ ºñ µ¿±â Åë½Å ±â¼ú"°ú "µ¿Àû Ŭ¶óÀÌ¾ðÆ® ½ºÅ©¸³ÆÃ ±â¹ý"À» Çϳª·Î ¹­Àº °ÍÀÌ Ajax¶ó´Â °ÍÀÔ´Ï´Ù. ¼­¹ö·ÎÀÇ ºñ µ¿±â Åë½ÅÀº ¿¹ÀüºÎÅÍ Áö¿øµÇ¾ú´ø ¼ÓĪ XMLHTTP ÄÄÆ÷³ÍÆ®(ÇÏ´Ü ¹Ú½º ÂüÁ¶)¸¦ ÀÌ¿ëÇϸç, Ŭ¶óÀÌ¾ðÆ® ½ºÅ©¸³ÆÃÀ¸·Î´Â Javascript¸¦ ÀÌ¿ëÇϱ⿡, ´ëºÎºÐÀÇ ºê¶ó¿ìÀú¿¡¼­ Ajax¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

Àú´Â ºñ µ¿±â È£ÃâÀ» À§ÇØ »ç¿ëµÇ´Â ºê¶ó¿ìÀú Áö¿ø °³Ã¼¸¦ 'XMLHTTP ÄÄÆ÷³ÍÆ®'¶ó°í Ç¥ÇöÇß½À´Ï´Ù¸¸, ÀÌ´Â °ø½Ä¸íĪÀº ¾Æ´Õ´Ï´Ù. ±×³É Á¦°¡ ±×·¸°Ô ºÎ¸£´Â °ÍÀÌ´Ï ¾çÇØÇϽʽÿÀ. ½ÇÁ¦ÀûÀÎ ÀÌ ÄÄÆ÷³ÍÆ®ÀÇ ¸ð½ÀÀº ºê¶ó¿ìÀú º°·Î ¾à°£ÀÇ Â÷À̰¡ ÀÖ½À´Ï´Ù. °£´ÜÈ÷ ¼³¸íÇÏÀÚ¸é, Firefox, ¸ðÁú¶ó, Opera·ùÀÇ °æ¿ì´Â ºñ µ¿±â È£ÃâÀ» À§Çؼ­ window.XMLHttpRequest¸¦ ÀÌ¿ëÇÕ´Ï´Ù. ÇÏÁö¸¸, IE(6.0 ÀÌÇÏ ¹öÀü)ÀÇ °æ¿ì´Â ¾ÈŸ±õ°Ôµµ ±×¸¦ »ç¿ëÇÏÁö ¸øÇϸç ActiveXObjectÀÎ Microsoft.XMLHTTP¸¦ »ç¿ëÇØ¾ß¸¸ ÇÕ´Ï´Ù. Á» ¾Æ½±ÁÒ. ÇÏÁö¸¸, IE 7ºÎÅÍ´Â window.XMLHttpRequest¸¦ Áö¿øÇÑ´Ù´Â ±â»Û(?) ¼Ò½ÄÀÌ ÀÖÀ¸´Ï ¾à°£Àº À§¾ÈÀÌ µË´Ï´Ù(Á¤¸»? ÀÌ°Ô À§¾ÈÀÌ µÉ±î?).

Á» ´õ ½±°Ô ¼³¸íÇÏÀÚ¸é, Ajax¸¦ »ç¿ëÇÏ¸é ºê¶ó¿ìÀú¸¦ »õ·Î °íÄ¥ ÇÊ¿ä ¾øÀÌ, JavaScript¸¦ ÀÌ¿ëÇÏ¿© ¼­¹ö ÃøÀÇ ¸Þ¼­µå¸¦ ½ÇÇàÇϰí, ±× °á°ú µ¥ÀÌÅ͸¦ ¹Þ¾Æº¼ ¼ö ÀÖ´Ù´Â °Í ÀÔ´Ï´Ù. Áï, »ç¿ëÀÚ ¸ð¸£°Ô ¹é±×¶ó¿îµå¿¡¼­ ¼­¹ö¿ÍÀÇ ¿äû/ÀÀ´äÀ» ó¸®ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌÁÒ.

AjaxÀÇ ¿ª»ç?

Ajax°¡ »ó´çÈ÷ »õ·Î¿î ±â¼ú °°Áö¸¸ »ç½Ç»ó ÀÌ ±â¹ýÀº ±âÁ¸ ASP ½ÃÀýºÎÅÍ Áß±Þ À¥ ÇÁ·Î±×·¡¸ÓµéÀÌ ÀÚÁÖ ½á¿Ô´ø ºñ µ¿±â Åë½Å ±â¹ýÀÌ ½Å±â¼ú°ú ¸Â¹°·Á Á¤¸®µÈ ±â¼úÀÌ¶ó º¼ ¼ö ÀÖ½À´Ï´Ù. ¿¹Àü¿¡µµ ÀÌ¿Í À¯»çÇÑ ±â¼úÀº Á¸ÀçÇß½À´Ï´Ù. ¿¹¸¦ µé¸é, °íÀüÀûÀ¸·Î »ç¿ëµÇ¾ú´ø ¹æ¹ý Áß Çϳª·Î´Â IFRAMEÀ» ÅëÇÑ ºñ µ¿±â Åë½Å ±â¹ýÀÌ ÀÖ¾ú½À´Ï´Ù. È­¸é »õ·Î °íħ ¾øÀÌ IFRAMEÀ» ÀÌ¿ëÇÏ¿©(ÀÏÁ¾ÀÇ º°µµÀÇ Ã¤³Î) µ¥ÀÌÅ͸¦ °¡Á®¿Í DHTMLÀ» ÅëÇØ¼­ µ¿ÀûÀ¸·Î ±âÁ¸ È­¸é¿¡ µ¥ÀÌÅ͸¦ ¹Ý¿µÇÏ´Â ¹æ¹ýÀÌ ¹Ù·Î ±×°ÍÀÌÁÒ. ÀÌ ¹æ¹ýµµ ¾î¶»°Ô º¸¸é ÇöÀçÀÇ Ajax¿Í °³³ä ÀÚü´Â À¯»çÇÑ ±â¹ýÀ̶ó ÇÒ ¼ö ÀÖ°Ú½À´Ï´Ù. ÇöÀçÀÇ ±â¹ý¿¡ ºñÇÏ¸é ´ë´ÜÈ÷ Á¶¾ÇÇϱä ÇÏÁö¸¸ ¸»ÀÔ´Ï´Ù. »ç½Ç, ½ÇÁ¦ÀûÀÎ AjaxÀÇ ¸ðü°¡ µÈ ±â¼úÀº XMLHTTP ÄÄÆ÷³ÍÆ®¸¦ ÀÌ¿ëÇÑ ºñ µ¿±â Åë½Å ±â¹ýÀ̾ú½À´Ï´Ù. ÀÌ´Â ÇöÀçÀÇ Ajax¿¡¼­µµ ±×´ë·Î »ç¿ëµÇ°í Àֱ⵵ ÇÕ´Ï´Ù(³»ºÎÀûÀ¸·Î ¸»ÀÌÁÒ). XMLHTTP ÄÄÆ÷³ÍÆ®¸¦ ÀÌ¿ëÇÏ°Ô µÇ¸é ±âÁ¸ ¶«»§ ½ÄÀÇ IFRAME ¹æ½Ä¿¡¼­ ¹þ¾î³ª º¸´Ù Á÷°üÀûÀÎ ºñ µ¿±â Åë½Å ±â¹ýÀ» ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÇÏÁö¸¸, XMLHTTP Àû¿ë Ãʱ⿡µµ µ¥ÀÌÅÍ Æ÷¸Ë ¶§¹®¿¡ ¾à°£ÀÇ ÇǰïÇÔÀº ÀÖ¾ú½À´Ï´Ù. Áï, ¼­¹ö Ãø°úÀÇ ºñ µ¿±â Åë½Å ä³ÎÀ» À§ÇØ XMLHTTP¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ±ä ÇßÁö¸¸, Åë½ÅÀ¸·Î ÁÖ°í¹Þ´Â µ¥ÀÌÅÍ¿¡ ´ëÇÑ Ç¥ÁØÀº Á¤ÇØÁöÁö ¾Ê¾Ò±â ¶§¹®ÀÔ´Ï´Ù. ÇØ¼­, ±× ´ç½Ã¿¡´Â ÁÖ·Î ±¸ºÐÀÚ¸¦ ³¢¿ö¼­ ±¸¼ºÇÑ ¹®ÀÚ¿­À» ÁÖ°í ¹Þ°ï Çß¾ú½À´Ï´Ù. ¿¹¸¦ µé¸é, ¼­¹ö¿¡¼­´Â µ¥ÀÌÅ͸¦ "±èÅ¿µ\±è´ö¿µ\±è¿µÇö"¿Í °°Àº ÇüÅ·Π¹ÝȯÇϰí, javascript´Â ÀÌ µ¥ÀÌÅ͸¦ ¹Þ¾Æ¼­ "\"·Î ºÐ¸®ÇÏ¿©, °¢°¢ÀÇ °ªÀ» »Ì¾Æ³» »ç¿ëÇÏ´Â ÀÏÀ» ¹Ýº¹ÇØ¾ß Çß¾ú´ø °ÍÀÌÁÒ. ÀÌ·¯ÇÑ ³ë°¡´Ù ¼º ÀÛ¾÷Àº ¾ðÁ¨°¡´Â ÇØ°áµÇ¾î¾ß ÇÒ ¼÷Á¦°¡ ¾Æ´Ò ¼ö ¾ø¾ú½À´Ï´Ù.

ÇÏÁö¸¸, XML µîÀå°ú ÇÔ²² ±× ¼÷Á¦µµ ÀÚ¿¬½º·´°Ô ÇØ°áÀÌ µÇ¾ú½À´Ï´Ù. ÇØ¼­, ±âÁ¸ ºñ µ¿±â Åë½Å ±â¹ý¿¡ XMLÀÌ ¸Úµé¾îÁö°Ô °áÇյǸ鼭 ÇöÀçÀÇ Ajax°¡ ³ªÅ¸³ª°Ô µÈ °ÍÀÔ´Ï´Ù. XMLÀÌ ¾÷°è Ç¥ÁØÀÌ µÇ±â ÀÌÀü, ÀÚ±âµé¸¸ÀÇ µ¥ÀÌÅÍ Æ÷¸ËÀ» »ç¿ëÇß¾ú±â¿¡ ¼ö¹ÝµÉ ¼ö ¹Û¿¡ ¾ø¾ú´ø °³¹ß»óÀÇ ³­µ¶¼º ¹× º¹À⼺ÀÌ XMLÀ» ¹Ý¿µÇÔÀ¸·Î½á °³¼±µÇ°í Á¤¸®µÈ °ÍÀÌÁÒ.

ÇØ¼­, ¸íĪÀÌ ¹Ù·Î Asynchronous JavaScript And XMLÀÎ °ÍÀÔ´Ï´Ù. ^^

Âü. ¿ÀÇØÇÏ½Ç±î ºÁ ¸»¾¸À» µå¸®ÀÚ¸é, Ajax´Â MSÀÇ ±â¼úµµ ±× ´©±¸ÀÇ ±â¼úµµ ¾Æ´Õ´Ï´Ù. ÀÌ´Â Ãß»óÀûÀÎ ±â¼ú¿¡ ´ëÇÑ ¿ë¾îÀÏ »ÓÀÔ´Ï´Ù. ÀÎÅͳÝÀ̶ó´Â ´Ü¾î°¡ ±× ¾î¶² Á¦Ç°ÀÇ ´Ü¾î°¡ ¾Æ´ÏµíÀÌ ¸»ÀÌÁÒ(ºñÀ¯°¡ ÀÌ»óÇѰ¡¿ä? ^^). MS Áø¿µ¿¡¼­´Â ÀÌ·¯ÇÑ Ajax¸¦ ´õ¿í °³¹ßÀÚ°¡ ÀÌ¿ëÇÏ±â ÆíÇϵµ·Ï ÇÁ·¹ÀÓ¿öÅ©¿Í API¸¦ ÇöÀç °³¹ßÇϰí Àִµ¥¿ä. ¾Æ¸¶µµ 2006³â Á߹ݱ⿡´Â ±× ¸ð½ÀÀÌ µå·¯³ªÁö ¾ÊÀ»±î ½Í½À´Ï´Ù. ÄÚµå¸íÀº AtlasÀ̰í, ÇöÀç´Â ¾ËÆÄ ¹öÀü(°¡Àå ÃÖ½ÅÀº 2005³â 12¿ù ¹öÀü)¸¸ÀÌ °ø°³µÇ¾î ÀÖ½À´Ï´Ù. ^^

ÇÖ? ±×·¸´Ù¸é, ±â¿ÕÀÌ¸é ¾ÆÆ²¶ó½º(Atlas)¿¡ ´ëÇÑ À̾߱â·Î À̹ø °­Á°¡ ÁøÇàµÇ¸é ÁÁÀ» °Í °°´Ù±¸¿ä? À½.. ±×·¸´Ù¸é, Á˼ÛÇÕ´Ï´Ù. ¾ÈŸ±õ°Ôµµ ¾ÆÆ²¶ó½º¸¦ À̹ø °­Á¿¡¼­ ´Ù·ç±â´Â ¾î·Á¿ï µí ÇÕ´Ï´Ù. ¹°·Ð, 3¿ù¿¡ ÀÖÀ» INETA ÄÁÆÛ·±½º¿¡¼­´Â Ajax¿Í Atlas¿¡ ´ëÇÑ ³»¿ëÀ» ¹ßÇ¥ÇÒ ¿¹Á¤¿¡ ÀÖ±ä ÇÕ´Ï´Ù¸¸, ¾ÆÁ÷Àº ¾ËÆÄ ¹öÀüÀ̰í ÇØ¼­ °­ÀǶó¸é ¸ð¸¦±î °­Á·δ ±× ³»¿ëÀ» Ç®¾î¾²±â°¡ ½±Áö ¾ÊÀ» µí Çϳ׿ä(¿Ö? ¿Ö? ¹«½¼ Â÷À̰¡ Àִµ¥?? -_-)

Ajax.NET

±×·¸´Ù¸é, À̹ø °­Á¿¡¼­´Â Ajax¿¡ ´ëÇÑ ¹«½¼ À̾߱⸦ ÇÏ·Á ÇÏ´À³Ä? ±×°ÍÀÌ ±Ã±ÝÇϽÃÁÒ? »ç½Ç Ajax¿¡ ´ëÇÑ µ¥¸ð¸¦ º¸°í ½Í´Ù ÇϽøé, ÀÌ¹Ì Áö Áö³­ ¹ø¿¡ ¿¬ÀçÇÑ ºñ µ¿±â È£Ãâ °­ÁÂÀÇ 2¹øÂ° °­ÁÂÀÎ "XMLHTTP" °­Á¸¦ ÅëÇØ¼­ ÀÌ¹Ì Çѹø °æÇèÇÑ °ÍÀ̳ª ´Ù¸¦ ¹Ù ¾ø½À´Ï´Ù. ±× ¶ÇÇÑ XML µ¥ÀÌÅ͸¦ ÀÌ¿ëÇÏÁö ¾Ê¾Ò´Ù »ÓÀÌÁö ÀÏÁ¾ÀÇ Ajax ±â¹ýÀ̶ó ÇÒ ¼ö Àֱ⠶§¹®ÀÌÁÒ. ±×°ÍÀ¸·Î ºÎÁ·ÇϽôٸé, Áö³­ °­ÁÂÀÌÀÚ ¼¼ ¹øÂ° °­Á¿´´ø WebService Behavior¸¦ ¶°¿Ã¸®¼Åµµ µË´Ï´Ù. ±× °­Á´ ½Ç·Î ¿ÏÀüÇÑ Ajax ¿¹Á¦¶ó ÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. °í·Î, ¿©·¯ºÐÀº ÀÌ¹Ì ¾Ë°Ô ¸ð¸£°Ô Ajax¸¦ Á¢Çß´ø °ÍÀÔ´Ï´Ù(´Ü, ±âÁ¸ °­Á¸¦ ÀÐÀº ºÐ¸¸ ¿©±â¿¡ ÇØ´çµÊ).

ÇÏÁö¸¸, ¿©·¯ºÐÀÌ ¿øÇÏ´Â Ajax ¿¹Á¦´Â ±×°ÍÀÌ ¾Æ´Ï¶ó´Â °ÍÀ» ¾Ð´Ï´Ù. º¸´Ù ½±°Ô, ´õ °£ÆíÇÏ°Ô Ajax¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ¿øÇϽô °ÍÀÌÁÒ? ¹°·ÐÀÔ´Ï´Ù. ÇØ¼­, À̹ø °­Á¿¡¼­ ÁøÇàÇÏ·Á´Â °ÍÀº Áö³­ 9¿ù¿¡ MSDN¿¡ ¿Ã¶ó¿Â Ä÷³(ASP.NET Spiced: Ajax)À» ±â¹ÝÀ¸·Î ÇØ¼­ Ajax.NET¿¡ ´ëÇØ ¾Ë¾Æº¸´Â ³»¿ëÀ¸·Î ÁøÇàÇØº¼±î ÇÕ´Ï´Ù. ¸µÅ©´Â http://www.microsoft.com/korea/msdn/asp.net/default.aspx?pull=/korea/msdn/library/ko-kr/dnaspp/html/ASPNetSpicedAjax.asp À̱¸¿ä.

±× Ä÷³¿¡¼­´Â AjaxÀÇ ¼Ò°³¿Í ÇÔ²² Ajax.NETÀ̶ó´Â °ÍÀ» ¼Ò°³Çϰí Àִµ¥¿ä. ÀÌ´Â ASP.NET ºÐ¾ßÀÇ MVPÀÎ Michael Schwarz¶ó´Â »ç¶÷ÀÌ °³¹ßÇÑ .NETÀ» À§ÇÑ Ajax¿ë ¶óÀ̺귯¸®ÀÔ´Ï´Ù. ÁÖÀÇÇÏ½Ç Á¡Àº ±× Á¦Ç°ÀÌ MS°¡ Á¦°øÇÏ´Â ¶óÀ̺귯¸®´Â ¾Æ´Ï¶ó´Â Á¡ÀÔ´Ï´Ù. ^^ ÇÏÁö¸¸, »ó´çÈ÷ ¾µ¸¸ÇÑ ¶óÀ̺귯¸®À̱⿡ MS Ä÷³¿¡µµ ¼Ò°³µÇ¾úÁÒ. ±× ÄÁ¼ÁÀ̳ª »ç¿ë¹æ¹ýÀÌ »ó´çÈ÷ Æí¸®ÇÏ°í ±â¹ßÇØ¼­ ÁÖ¸ñÀ» ¹Þ±âµµ Çß½À´Ï´Ù. °Ô´Ù°¡, ±× ¶óÀ̺귯¸®´Â WebService BehaviorÀÌ Á¦°øÇÏÁö ¾Ê¾Ò´ø µ¥ÀÌÅÍ Å¸ÀÔÀÎ DataSetÀ̳ª DataTableµµ Áö¿øÇÏ´õ±º¿ä. °³¹ßÀÚÀÇ ºí·Î±×´Â http://weblogs.asp.net/mschwarz/ ÀÔ´Ï´Ù. °ü½ÉÀÖ´Â ºÐÀº ÇѹøÂë °¡ ºÁµµ ÁÁÀ» µí ÇÕ´Ï´Ù.

¿ë¾î°¡ È¥¶õ½º·¯¿ï±îºÁ Àá½Ã Á¤¸®ÇÏ°í ³Ñ¾î°¡¸é, Ajax´Â Ŭ¶óÀÌ¾ðÆ®¿¡¼­ ¼­¹ö Ãø ÇÔ¼ö¸¦ ºñ µ¿±âÀûÀ¸·Î È£ÃâÇϱâ À§ÇÑ ÇÁ·¹ÀÓ¿öÅ©¸¦ ¸»ÇÏ´Â °ÍÀ̰í¿ä. ƯÁ¤ ȸ»çÀÇ Á¦Ç°¸íÀÌ ¾Æ´Õ´Ï´Ù(¾Õ¿¡¼­ ´©´©È÷ °­Á¶ µå·È½À´Ï´Ù).

¹Ý¸é, Ajax.NETÀº Ajax ÇÁ·¹ÀÓ¿öÅ©¸¦ Ȱ¿ëÇÏ´Â ¼Ö·ç¼ÇÀ» ±¸ÃàÇÏ´Â µ¥ µµ¿òÀÌ µÇ´Â ƯÁ¤ ±¸ÇöÀ» ¸»ÇÕ´Ï´Ù. Áï, Ajax ±¸ÇöÀ» À§ÇÑ °³¹ß µµ±¸ Áß Çϳª°¡ Ajax.NET À̶ó´Â °ÍÀÔ´Ï´Ù. ¹°·Ð, 2006³â Á߹ݿ¡´Â Ajax ±¸ÇöÀ» À§ÇÑ MSÀÇ °³¹ß ÇÁ·¹ÀÓ¿öÅ©µµ ¹ßÇ¥µÇ°ÚÁö¸¸ ¸»ÀÔ´Ï´Ù(¿ÀǼҽº Áø¿µ¿¡¼­´Â AjaxTags¶ó´Â ¶óÀ̺귯¸®°¡ °³¹ß ¹× ¸±¸®ÁîµÇ°í ÀÖ´Â °ÍÀ¸·Î ¾Ð´Ï´Ù).

¾à°£ ±èÀÌ »õ½Å´Ù±¸¿ä? ¿Ö ¿ì¸®°¡ MS°¡ Á¦°øÇÏ´Â °Íµµ ¾Æ´Ñ ´Ù¸¥ °³¹ßÀÚ(¹°·Ð °í¼ö°ÚÁö¸¸)ÀÇ Á¦Ç°À» ÀÌ¿ëÇØ¼­ Ajax¸¦ °³¹ßÇØ¾ß Çϳı¸¿ä? ¹°·Ð, ±×·¸°Ô ¿ì¿ïÇØÇÒ ¼öµµ ÀÖ±ä ÇÒ °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸, ¼ÖÁ÷È÷ °­Á¸¦ ÀÐ°í °è½Ã´Â ºÐµé Áß ¸¹Àº ºÐµéÀÌ ¸î ½Ã°£ ¶Ç´Â ¸î ÀÏ¿¡ °ÉÃÄ AjaxÀÇ º»ÁúÀ» ÀÌÇØÇÏ·Á Çϱ⠺¸´Ù´Â, ´çÀå Ajax¸¦ »ç¿ëÇÏ´Â ÀÀ¿ë ÇÁ·Î±×·¥À» ¸¸µé¾î¼­ "¾Æ~ ¿¡ÀÌÀ轺°¡ ÀÌ·± °ÍÀ̱¸³ª. ¹¹ º°°Å ¾Æ´Ï³×" ȤÀº "¿À.. ¾ÆÀÛ½º. ¿ÏÀü ¾ÆÀÛÀε¥!!!" ÇÏ°í ½ÍÀ» °ÍÀÔ´Ï´Ù. ÇØ¼­, ±×·¯ÇÑ ¿å±¸¸¦ ÃæÁ·½Ã۱â À§Çؼ­ À̹ø °­Á¸¦ ÁøÇàÇÏ·Á ÇÏ´Â °ÍÀÔ´Ï´Ù. ^^ (¸·»ó ÇØ º¸½Ã¸é Àç¹ÌÀÖ¾î ÇϽǰɿä~)

´ÙÀ½Àº Âü°í »ï¾Æ, Á¦ ¸¾´ë·Î Á¤¸®ÇØ º» MSÀÇ Ajax HistoryÀÔ´Ï´Ù. ^^; Á¦ ¸¾´ë·Î Á¤¸®ÇÑ °ÍÀ̱⿡ ÀÚ·áÀÇ ½Åºù¼ºÀ» 100% º¸ÀåÇÒ ¼ö´Â ¾ø½À´Ï´Ù. ÇÏÇÏÇÏ

ÀÚ. ±×·³ ÀÌÁ¦ º»°ÝÀûÀÎ ½ÃÀÛÀ» Çѹø ÇØ º¸°Ú½À´Ï´Ù.

Ajax.NET ¿¹Á¦

¿ì¼±, À§ÀÇ MS Ä÷³¿¡¼­ Ajax.NET µ¥¸ð¼Ò½º¸¦ ´Ù¿î·Îµå ¹Þµµ·Ï Çϼ¼¿ä. '¸µÅ© ã¾Æ°¡±â ±ÍÂú¾Æ¿ä. ¹Ù·Î ´Ù¿î·Îµå ÇÏ°Ô ÇØ ÁÖ¼¼¿ä' ÇϽô ºÐµéÀ» À§ÇØ ¿©±â¿¡µµ ¸µÅ©¸¦ °Éµµ·Ï ÇϰڽÀ´Ï´Ù.

´Ù¿î·Îµå : (C# ¹öÀü) AjaxASPNETCS.msi
´Ù¿î·Îµå : (VB.NET ¹öÀü) AjaxASPNETVB.msi

¹Þ¾Æ¼­, ¼³Ä¡¸¦ ÇÏ½Ã°í ³ª¸é Ajax with ASP.NET (C#)À̶ó´Â Æú´õ°¡ »ý±æ °ÍÀÔ´Ï´Ù. ÀúÀÇ °æ¿ì´Â ¼³Ä¡¸¦ [³» ¹®¼­] ÂÊ¿¡ Ç߱⿡ ´ÙÀ½ °æ·Î¿¡ »ý°å½À´Ï´Ù. ÀÏ´Ü, ¼³Ä¡ÇϼÌÀ¸¸é ÇØ´ç Æú´õ¸¦ AjaxSampleCS¶ó´Â À̸§ÀÇ °¡»ó µð·ºÅ͸®·Î Àâ¾ÆÁÖ¼Å¾ß ÇÕ´Ï´Ù(¿Ö ¼³Ä¡ ½Ã¿¡ ±× ÀÛ¾÷±îÁö ÀÚµ¿À¸·Î µÇÁö ¾Ê´ÂÁö ¾à°£ ¼­¿îÇϱ⵵ ÇÕ´Ï´Ù¸¸).

´Ù µÇ¼ÌÀ¸¸é, VS.NET 2003À» ½ÇÇàÇϽðí, ÇØ´ç Æú´õ¿¡¼­ AjaxSampleCS.sln ÆÄÀÏÀ» ½ÇÇàÇÕ´Ï´Ù. ±×·¯¸é, À¥ ÇÁ·ÎÁ§Æ®°¡ ·Îµå µÉ °ÍÀÔ´Ï´Ù.

ÀÌ ¿¹Á¦¸¦ ½ÇÇàÇϱâ À§Çؼ­´Â ¹Ýµå½Ã VS.NET 2003ÀÌ ÇÊ¿äÇÕ´Ï´Ù.

´ë·« 4°³ÀÇ »ùÇÃÀÌ Á¸ÀçÇÏ´Â µ¥, Àú´Â ÀÌ Áß Ã¹ ¹øÂ° »ùÇÃÀÎ DropDownLink ¸¸À» °°ÀÌ »ìÆìº¸µµ·Ï ÇϰڽÀ´Ï´Ù. ÇÑ °¡Áö¸¸ ´Ù·ç¾îº¸¸é ´Ù¸¥ °ÍµéÀº ¿©·¯ºÐÀÌ ½º½º·Î ÆÄ¾ÇÀÌ °¡´ÉÇÏ½Ç µí Çϴϱî¿ä ^^

¿ì¼±, °°ÀÌ »ìÆìº¼ ÆäÀÌÁöÀÇ ½ÇÇà °á°úºÎÅÍ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ÇÁ·ÎÁ§Æ®¸¦ ºôµå ÇϽŠµÚ¿¡ Sample1 Æú´õ¿¡ Á¸ÀçÇÏ´Â DropDownLink.aspx ÆäÀÌÁö¸¦ [ºê¶ó¿ìÀú¿¡¼­ º¸±â] Çϼ¼¿ä. ±×·³ ´ÙÀ½°ú °°ÀÌ ½ÉÇÃÇÑ µ¥¸ð ÆäÀÌÁö°¡ ºê¶ó¿ìÀú¿¡ ±× ¸ð½ÀÀ» µå·¯³¾ °ÍÀÔ´Ï´Ù.

µ¥¸ð´Â ¸Å¿ì ½ÉÇÃÇÕ´Ï´Ù. ù ¹øÂ° µå·Ó´Ù¿î¿¡¼­ ±¹°¡¸¦ ¼±ÅÃÇϸé, ¿ìÃø µå·Ó´Ù¿î¿¡ ÇØ´ç ±¹°¡ÀÇ ÁÖ(State)µéÀÌ ³ª¿­µÇ´Â ÇüÅÂÀÔ´Ï´Ù. ¹°·Ð, ÆäÀÌÁöÀÇ Æ÷½ºÆ®¹éÀÌ ÀüÇô ¾øÀÌ ¸»ÀÔ´Ï´Ù.

¾óÇÍ º¸±â¿¡µµ ÈǸ¢ÇÏÁö ¾Ê³ª¿ä?

ÇÏ´Â ±è¿¡, µÎ ¹øÂ° µ¥¸ðµµ ½ÇÇàÇØ º¼±î¿ä? µÎ ¹øÂ° µ¥¸ð´Â ¸¹Àº ºÐµéÀÌ ¿ä±äÇØ ÇÏ½Ç ¸¸ÇÑ ÀÚµ¿¿Ï¼º ±â´ÉÀÇ ±¸ÇöÀÔ´Ï´Ù. Sample1 Æú´õÀÇ SearchCompletion.aspx ÆäÀÌÁö¸¦ ½ÇÇàÇØ º¸¼¼¿ä. ´Ü¼øÇØ º¸ÀÔ´Ï´Ù¸¸, ÀÌ µ¥¸ðµµ »ó´çÈ÷ Àç¹ÌÀÖ½À´Ï´Ù. ÅØ½ºÆ® ¹Ú½º¿¡ 'a' À̶ó°í ÀÔ·ÂÇÏ¸é ±× Áï½Ã 'a'·Î ½ÃÀÛÇÏ´Â ¸ðµç µµ½Ã¸íÀÌ ¸®½ºÆ®¹Ú½º¿¡ Ãâ·ÂµÇ°í, 'al'À̶ó°í ÀÔ·ÂÇÏ¸é ±× Áï½Ã, al·Î ½ÃÀÛÇÏ´Â ¸ðµç µµ½Ã¸íÀÌ ÇÏ´Ü¿¡ Ãâ·ÂµÇ´Â ÀÚµ¿¿Ï¼º ±â´ÉÀÔ´Ï´Ù.

µÎ ¿¹Á¦´Â ½ÇÇà ¸ð½ÀÀÌ ¼­·Î ´Ù¸£Áö¸¸ ³»ºÎÀûÀ¸·Î´Â »ó´çÈ÷ À¯»çÇϱ⿡, °­Á¿¡¼­´Â ÀÌ Áß Ã¹ ¹øÂ° ¿¹Á¦¸¸À» °°ÀÌ Çѹø »ìÆìº¸·Á ÇÕ´Ï´Ù. ±×·¯¸é, µÎ ¹øÂ° ¿¹Á¦´Â È¥ÀÚ¼­µµ ÀßÇØ¿ä~ ÇÒ ¼ö ÀÖÀ» °ÍÀ̶ó ¹Ï¾î ÀǽÉÇÒ ²¨~~¾ß!!

ÀÏ´Ü, [¼Ö·ç¼Ç Ž»ö±â]¿¡¼­ [ÂüÁ¶] Æú´õ¸¦ º¸½Ã¸é Ajax¶ó´Â °ÍÀÌ Á¸ÀçÇÏ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. ¹°¸®ÀûÀÎ Æú´õÀÇ bin µð·ºÅ͸®¿¡´Â ÀÌ¿¡ ÇØ´çÇÏ´Â Ajax.dllÀÌ Á¸ÀçÇϰí ÀÖ°í¿ä. À̰ÍÀÌ Ajax.NETÀÇ ÇٽɸðµâÀÔ´Ï´Ù. Ajax.NETÀ» ÀÌ¿ëÇÏ°í ½Í´Ù¸é, ´ÜÁö ÀÌ DLL¸¸À» ÂüÁ¶ÇØ ¾²¸é µÇ´Â °ÍÀÌÁÒ.

¶ÇÇÑ, Sample2¿¡´Â DAL.cs ÆÄÀÏÀÌ Á¸ÀçÇÏ´Â °ÍÀ» º¼ ¼ö Àִµ¥¿ä. ÀÌ ºÎºÐÀº ±¹°¡¸íÀ» °¡Á®¿À°Å³ª(GetShippingCountries), ƯÁ¤ ±¹°¡ÀÇ ÁÖ ¸íĪÀ» ¾ò¾î¿À´Â ÇÔ¼ö(GetCountryStates) µîÀÌ µé¾îÀÖ½À´Ï´Ù. ÀÏÁ¾ÀÇ µ¥ÀÌÅÍ ¾×¼¼½º Ŭ·¡½º¶ó°í º¸½Ã¸é µÉ µí ÇÕ´Ï´Ù. ù ¹øÂ° ¿¹Á¦´Â ÀÌ DAL.csÀÇ ÇÔ¼öµé Áß¿¡ ±¹°¡ ¸íÀ» ¾ò¾î¿À´Â GetShippingCountries() ¸Þ¼­µå¿Í ÁöÁ¤µÈ ±¹°¡ÀÇ ÁÖ ¸íĪÀ» ¾ò¾î¿À´Â GetCountryStates() ¸Þ¼­µå¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù. °¢°¢Àº DataTable°ú DataView¸¦ ¹ÝȯÇϵµ·Ï ÀÛ¼ºµÇ¾î ÀÖ°í¿ä.

¹°·Ð, ¹Ýµå½Ã ÀÌ·¸°Ô µ¥ÀÌÅÍ ¾×¼¼½º ÄÄÆ÷³ÍÆ®¸¦ ¸¸µé¾î ½á¾ß ÇÏ´Â °ÍÀº ¾Æ´ÏÁö¸¸, ¸Þ¼­µåÀÇ Àç »ç¿ë¼ºÀ» À§Çؼ­¶óµµ ÀÌ·¸°Ô ±¸¼ºÇØ ¾²´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù ÇÒ ¼ö ÀÖ°Ú½À´Ï´Ù. ¿©±â¼­ N-Tier(Layer) À̾߱⸦ ²¨³»´Â °ÍÀº ¾à°£ ÁÖÁ¦¿¡ ¾î±ß³ª´Â °ÍÀ̱⿡ ±× ÂÊ °ü·Ã ¼³¸íÀº ¿©±â±îÁö¸¸ Çϱâ·Î ÇϰڽÀ´Ï´Ù. ½ÇÁ¦ÀûÀ¸·Î ¿ì¸®°¡ °ü½ÉÀÖ´Â ºÎºÐÀº AjaxÀ̴ϱî¿ä.

ÀÚ ±×·³ ÀÌÁ¦ º»°ÝÀûÀ¸·Î DropDownLink.aspx ÆäÀÌÁöÀÇ ÄÚµå ºñÇÏÀÎµå ¼Ò½º¸¦ »ìÆìº¸µµ·Ï ÇϰڽÀ´Ï´Ù. ±× ¼Ò½º´Â ´ÙÀ½°ú °°½À´Ï´Ù(ÀÏ´ÜÀº ¹öư submit ºÎºÐÀº »©°í »ìÆìº¸µµ·Ï ÇϰڽÀ´Ï´Ù)

namespace AjaxSampleCS.Sample1
{
    public class DropDownLink : Page
    {
        protected DropDownList countries;
        protected DropDownList states;
        protected Button submit;

        private void Page_Load(object sender, EventArgs e)
        {
            // ÀÌ Å¬·¡½ºÀÇ ¸Þ¼­µå¸¦ Ŭ¶óÀÌ¾ðÆ® Ãø¿¡¼­ È£ÃâÀÌ °¡´ÉÇÏ°Ô Çϱâ À§Çؼ­ AjaxMethod·Î Ç¥½Ã
            Ajax.Utility.RegisterTypeForAjax(typeof(DropDownLink));
            if (!Page.IsPostBack)
            {
                countries.DataSource = DAL.GetShippingCountries();
                countries.DataTextField = "Country";
                countries.DataValueField = "Id";
                countries.DataBind();

                countries.Items.Insert(0, new ListItem("Please Select", "0"));
            }
        }

        [Ajax.AjaxMethod()]
        public DataView GetStates(int countryId)
        {
            return DAL.GetCountryStates(countryId);
        }

        ¡¦

¿ø·¡ ¼Ò½º¿¡¼­ ÁÖ¼®Àº ¿µ¾î·Î Ç¥±âµÇ¾î ÀÖÀ¸³ª, ¿©±â¼­´Â Á¦°¡ ¹ø¿ªÇؼ­ Ç¥ÇöÇØ º¸¾Ò½À´Ï´Ù. ÂøÇÏÁÒ? -_-a

ÀÏ´Ü, ASPX ÆäÀÌÁö¿¡¼­ Áغñ°¡ µÇ¾î¾ß ÇÒ °ÍµéÀº ¹«¾ùÀϱî¿ä?

1) ÆûÀÌ Ã³À½ ·Îµå µÉ °æ¿ì, ù ¹øÂ° µå·Ó ´Ù¿î ÄÁÆ®·Ñ¿¡ ±¹°¡ ¸íÀ» ·Îµå ÇÏ´Â ÀÛ¾÷À» ¼öÇàÇØ¾ß ÇÕ´Ï´Ù. ¹°·Ð, ÀÌ´Â Ajax¿Í´Â ¹«°üÇÑ ÀÛ¾÷ÀÌÁÒ. ±×·¡¼­, º¸½Ã´Ù½ÃÇÇ, Page_Load¿¡´Â ±×·¯ÇÑ Äڵ尡 µé¾îÀÖ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.

2) ù ¹øÂ° µå·Ó ´Ù¿î ÄÁÆ®·Ñ¿¡¼­ ¼±ÅÃÀÌ ÀϾ °æ¿ì, Ajax¸¦ ÅëÇØ¼­ µÎ ¹øÂ° ÄÁÆ®·Ñ¿¡ ÇØ´ç ±¹°¡ÀÇ ÁÖ(State)¸íÀ» ·ÎµåÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ºÎºÐÀÌ ¿ì¸®ÀÇ ÇÙ½ÉÀÌÁÒ. ±×¸®°í, ÀÌ °á°ú¸¦ ¾ò±â À§Çؼ­ Ajax¿¡¼­´Â 2°¡ÁöÀÇ ÀÛ¾÷À¸·Î ºÐ¸®°¡ µË´Ï´Ù.

1. ÁöÁ¤µÈ ±¹°¡ÀÇ ÁÖ¸íÀ» ¾ò¾î¿À´Â ¼­¹ö Ãø ÇÔ¼ö(Javascript¿¡¼­ È£ÃâÀÌ °¡´ÉÇÑ) Á¦ÀÛ
2. ±×·¯ÇÑ ¼­¹ö Ãø ÇÔ¼ö¸¦ È£ÃâÇÏ°í ¾ò¾î¿Â °á°ú µ¥ÀÌÅ͸¦ Æû¿¡ ¹Ý¿µÇÏ´Â ÀÚ¹Ù½ºÅ©¸³Æ® Á¦ÀÛ

ÀÌ Áß ¼­¹ö ÆäÀÌÁöÀÎ ASPX Ãø¿¡¼­´Â 1¹øÀÌ ÁغñµÇ¾î¾ß ÇÒ °ÍÀÔ´Ï´Ù. ÇØ¼­, ¼Ò½º¸¦ º¸½Ã¸é ¹Ù·Î ±×·¯ÇÑ ¿ªÇÒÀ» ¼öÇàÇÏ´Â GetStates(int countryId) ¸Þ¼­µå°¡ ÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ÀÌ ¸Þ¼­µå´Â ÀÏ¹Ý ¸Þ¼­µå°¡ ¾Æ´Ñ 'Javascript¿¡¼­ È£ÃâÀÌ °¡´ÉÇÑ ¼­¹ö ÇÔ¼ö'¿©¾ß ÇÕ´Ï´Ù. ±×·¡¾ß Ajax°¡ ¿Ã¹Ù¸£°Ô ±¸ÇöµÇ´Â °ÍÀ̴ϱî¿ä.

¸Ç¶¥¿¡¼­ 'Javascript¿¡¼­ È£ÃâÀÌ °¡´ÉÇÑ ¼­¹ö ÇÔ¼ö'¸¦ ±¸ÇöÇÏ´Â °ÍÀº ±×¸® ½¬¿î ÀÏÀÌ ¾Æ´Õ´Ï´Ù. ±×·¸±â¿¡, ¿©±â¼­ Ajax.NETÀÌ ÇÊ¿äÇÑ °ÍÀÔ´Ï´Ù. Ajax.NETÀ» ÀÌ¿ëÇÏ°Ô µÇ¸é ´ÜÁö 'Javascript¿¡¼­ È£ÃâÀÌ °¡´ÉÇÑ ¼­¹ö ÇÔ¼ö'¸¦ ¸¸µé±â À§Çؼ­ ÇØ ÁÖ¾î¾ß ÇÒ °ÍÀº ÇØ´ç ÇÔ¼ö ¸í À§¿¡ °£´ÜÇÑ Ajax.NET ¾îÆ®¸®ºäÆ®¸¦ Çϳª Ãß°¡Çϱ⸸ ÇÏ¸é µË´Ï´Ù.

[Ajax.AjaxMethod()]

¶ó´Â ¾îÆ®¸®ºäÆ®¸¦ ¸»ÀÌÁÒ. Á¤¸»·Î °£´ÜÇÏÁÒ? ´ÜÁö À̰ÍÀ» ÁöÁ¤ÇÏ´Â °Í¸¸À¸·Î ÇØ´ç ÇÔ¼ö´Â 'Javascript¿¡¼­ È£ÃâÀÌ °¡´ÉÇÑ ¼­¹ö ÇÔ¼ö'°¡ µÇ´Â °ÍÀÔ´Ï´Ù. ^^

´Ü, Ajax.NETÀ» ¿Ã¹Ù¸£°Ô ±¸µ¿½Ã۱â À§ÇÑ [ÇÊ¿äÁ¶°Ç]ÀÌ Çϳª Á¸ÀçÇϰí Àִµ¥¿ä. ±×°ÍÀº Ãß°¡ÀûÀ¸·Î ¼­¹ö ÇÔ¼ö°¡ µé¾îÀִ Ŭ·¡½º°¡ ¹«¾ùÀÎÁö¸¦ Ajax.NET¿¡°Ô ¾Ë¸®´Â °ÍÀÔ´Ï´Ù. ÇØ¼­, Page_Load À̺¥Æ® ¾È¿¡´Â ´ÙÀ½°ú °°Àº Äڵ尡 ¹Ýµå½Ã Ãß°¡µÇ¾î¾ß ÇÕ´Ï´Ù.

Ajax.Utility.RegisterTypeForAjax(typeof(DropDownLink));

ÀÌ´Â ÇʼöÀûÀ¸·Î ³Ö¾îÁÖ¾î¾ß ÇÏ´Â °ÍÀÔ´Ï´Ù. Ajax.NETÀ» »ç¿ëÇÑ´Ù¸é ¸»ÀÌÁÒ.

ÇöÀçÀÇ ¿¹Á¦´Â 'Javascript¿¡¼­ È£ÃâÀÌ °¡´ÉÇÑ ¼­¹ö ÇÔ¼ö'¸¦ ASPX ÆäÀÌÁö Ŭ·¡½º ¾È¿¡ °°ÀÌ µÎ°í ÀÖÁö¸¸, °³¹ßÀÚ¿¡ µû¶ó¼­´Â À̸¦ º°µµÀÇ Å¬·¡½º·Î ºÐ¸®ÇÏ°í ½ÍÀ» ¼öµµ ÀÖÀ» °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¸é, ´ÙÀ½°ú °°ÀÌ ¸»ÀÌÁÒ.

namespace AjaxSampleCS.Sample1
{
    public class MyAjaxClass
    {
        [Ajax.AjaxMethod()]
        public DataView GetStates(int countryId)
        {
            return DAL.GetCountryStates(countryId);
        }
    }

    public class DropDownLink : Page
    {
        protected DropDownList countries;
        protected DropDownList states;
        protected Button submit;

        private void Page_Load(object sender, EventArgs e)
        {
            Ajax.Utility.RegisterTypeForAjax(typeof(MyAjaxClass));
            if (!Page.IsPostBack)
            {
                countries.DataSource = DAL.GetShippingCountries();
                countries.DataTextField = "Country";
                countries.DataValueField = "Id";
                countries.DataBind();

                countries.Items.Insert(0, new ListItem("Please Select", "0"));
            }
        }

        ¡¦

ÀÌ·± °æ¿ì¿¡´Â Page_Load À̺¥Æ®¿¡¼­ Ajax¿ë Ŭ·¡½º µî·ÏÀÌ ´ÙÀ½°ú °°ÀÌ º¯°æµÇ¾î¾ß ÇÕ´Ï´Ù.

Ajax.Utility.RegisterTypeForAjax(typeof(MyAjaxClass));

Áï, ½ÇÁ¦ Ajax¿ë ÇÔ¼ö°¡ Á¸ÀçÇϴ Ŭ·¡½º¸¦ µî·ÏÇØ ÁÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ¾î·ÆÁö ¾ÊÁÒ? À̰ÍÀ¸·Î ¼­¹ö ÃøÀÇ ¼³Á¤Àº ³¡ÀÔ´Ï´Ù. ³Ê¹«³ªµµ °£´ÜÇÕ´Ï´Ù. ´ÜÁö, ÇÊ¿äÇÑ ÇÔ¼ö¸¦ ¸¸µé°í, Ajax¿ë ¾îÆ®¸®ºäÆ®¸¸ ÁöÁ¤ÇØ ÁÖ¸é µÇ´Â °ÍÀÔ´Ï´Ù. ¹°·Ð, Page_Load À̺¥Æ®¿¡ Ajax¿ë Ŭ·¡½º¸¦ µî·ÏÇØÁÖ´Â °Íµµ Àؾ´Â ¾ÈµÇ°ÚÁÒ?

Áß¿äÂü°í (2006³â 2¿ù 12ÀÏ ¼öÁ¤)

Á¦°¡ Àá½Ã Àذí ÇѰ¡Áö ¾ð±ÞÇÏÁö ¾ÊÀº °ÍÀÌ ÀÖ¾ú´Âµ¥¿ä. ±×°ÍÀº Ajax.NETÀ» ÀÌ¿ëÇÒ °æ¿ì web.config¿¡ ÇѰ¡Áö ¼³Á¤ÀÌ µé¾î°¡¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. Áï, ´ÙÀ½°ú °°Àº Ãß°¡ ¼³Á¤ÀÌ web.config¿¡ ÀÛ¼ºµÇ¾î¾ß ÇÕ´Ï´Ù. ²À ³Ö¾îÁÖ¼¼¿ä ^^. °¨»çÇÕ´Ï´Ù.

<httpHandlers>
    <!-- ajax Çڵ鷯¸¦ µî·ÏÇÕ´Ï´Ù -->
    <add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />
</httpHandlers>

ÀÚ. ±×·¸´Ù¸é ÀÌÁ¦´Â Ŭ¶óÀÌ¾ðÆ® ÃøÀÇ Javascript¸¦ Çѹø »ìÆìº¼±î¿ä? DropDownLink.aspx ÆÄÀÏÀÇ HTML ºÎºÐÀ» »ìÆìº¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.


    ¡¦

    <form id="form" method="post" runat="server">
        <Common:Header runat="server" ID="Header1"/>
        <div class="content">
            <h4>Please select a Province or State to ship to</h4>
            <asp:DropDownList onChange="LoadStates(this)" ID="countries" Runat="server" />
            <asp:DropDownList ID="states" Runat="server" />
            <asp:Button ID="submit" Runat="server" Text="Submit" />
        </div>
    </form>
  </body>
</HTML>

<script language="javascript">
//states µå·Ó´Ù¿î
var statesList = document.getElementById("<%=states.ClientID%>");

// µå·Ó´Ù¿î¿¡¼­ onChange À̺¥Æ®°¡ ÀϾ °æ¿ì È£ÃâµÈ´Ù
function LoadStates(countries)
{
    var countryId = countries.options[countries.selectedIndex].value;
    if (countryId > 0)
    {
        //DropDownLink´Â ¿ì¸®°¡ µî·ÏÇØ ³õÀº ŸÀÔ ¸íÀ̱⿡, Ajax.NET¿¡ Á¤ÀǵǾî ÀÖ´Ù
        DropDownLink.GetStates(countryId, LoadStates_CallBack);
    }
    else
    {
        // states µå·Ó´Ù¿îÀ» ±ú²ýÀÌ ºñ¿î´Ù.
        states.options.length = 0;
    }
}
// Ajax.NETÀÌ ÀÀ´ä µ¥ÀÌÅ͸¦ Àü´ÞÇÏ´Â Äݹé ÇÔ¼ö
function LoadStates_CallBack(response)
{
    // ¸¸ÀÏ, ¼­¹ö Äڵ尡 ¿¹¿Ü¸¦ ÀÏÀ¸Å²´Ù¸é
    if (response.error != null)
    {
        alert(response.error); //¾Æ¸¶µµ À̺¸´Ù´Â ´õ ³ªÀº 󸮰¡ ÇÊ¿äÇÒ °ÍÀÌ´Ù.
        return;
    }

    var states = response.value;
    // ±â´ëÇß´ø ÀÀ´ä µ¥ÀÌÅͰ¡ ¾Æ´Ï¶ó¸é
    if (states == null || typeof(states) != "object")
    {
        return;
    }

    statesList.options.length = 0; //reset the states dropdown
    // JavaScript´Â ´ë,¼Ò¹®ÀÚ¸¦ ±¸ºÐÇϱ⿡ LengthÀÇ LÀº ¹Ýµå½Ã ¼Ò¹®ÀÚ·Î ÇØ¾ß ÇÑ´Ù.
    // (¾Æ¸¶µµ °³¹ßÀÚ°¡ ±×·¸°Ô Á¤ÀÇÇØ ³õÀº µíÇÏ´Ù)
    for (var i = 0; i < states.Rows.length; ++i)
    {
        statesList.options[statesList.options.length] = new Option(states.Rows[i].State, states.Rows[i].Id);
    }
}
</script>

HTML ÂÊ¿¡¼­ °ü½ÉÀ» °¡Áú ºÎºÐÀº ù ¹øÂ° µå·Ó´Ù¿î ÄÁÆ®·ÑÀÇ onChange À̺¥Æ®ÀÔ´Ï´Ù. ÀÌ´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºµÇ¾î ÀÖ½À´Ï´Ù. onChange="LoadStates(this)". ¿©±â¼­, ¿ì¸®´Â LoadStates ÇÔ¼ö°¡ ¹Ù·Î ¼­¹ö ÇÔ¼ö¸¦ ºñ µ¿±âÀûÀ¸·Î È£ÃâÇÏ´Â ÇÙ½ÉÀÏ °ÍÀÓÀ» ´«Ä¡Ã¤½Ç ¼ö ÀÖ½À´Ï´Ù.

ÀÌÁ¦ JavaScript ÂÊÀ» Çѹø »ìÆìº¸µµ·Ï ÇϰڽÀ´Ï´Ù.

ÀÏ´Ü, ½ºÅ©¸³Æ®°¡ ½ÃÀÛÇÏ´Â ºÎºÐ¿¡¼­´Â ù ¹øÂ° µå·Ó´Ù¿î ÄÁÆ®·Ñ °³Ã¼¸¦ statesList¶ó´Â º¯¼ö¿¡ ÇÒ´çÇϰí ÀÖ½À´Ï´Ù. µå·Ó´Ù¿î °³Ã¼¸¦ ¾ò±â À§Çؼ­´Â document.getElementById() ¸Þ¼­µå¸¦ ÀÌ¿ëÇϴµ¥¿ä. À̴ ƯÁ¤ À̸§¸¦ °®´Â Æû °³Ã¼¸¦ ¹ÝȯÇÏ´Â ¸Þ¼­µåÀÔ´Ï´Ù. ÁÖÀÇÇÒ ºÎºÐÀº µå·Ó´Ù¿î ÄÁÆ®·ÑÀÇ À̸§À¸·Î 'states'°¡ ¾Æ´Ñ "<%=states.ClientID%>"¸¦ »ç¿ëÇÑ´Ù´Â Á¡ÀÔ´Ï´Ù.

ÀÌ·¸°Ô ÁöÁ¤ÇÏ´Â ÀÌÀ¯´Â µå·Ó´Ù¿î ÄÁÆ®·ÑÀÌ ¼­¹ö ÄÁÆ®·ÑÀ̱⠶§¹®ÀÔ´Ï´Ù. ¼­¹ö ÄÁÆ®·ÑÀº ¼­¹ö¿¡¼­ÀÇ ÄÁÆ®·Ñ ID´Â statesÀÌÁö¸¸, ºê¶ó¿ìÀúÀÇ Ãâ·Â HTML ¿¡¼­´Â ±× ID°¡ µ¿ÀûÀ¸·Î Àç »ý¼ºµÉ ¼öµµ ÀÖ½À´Ï´Ù. ƯÈ÷, ÄÁÆ®·ÑÀÌ Panel°ú °°Àº ÄÁÅ×ÀÌ³Ê ¾È¿¡ µéÀ̾úÀ» °æ¿ì¿¡´Â ¸»ÀÔ´Ï´Ù. ¿¹¸¦ µé¸é, ±×·¯ÇÑ °æ¿ì ctl0_states¿Í °°ÀÌ ¹Ù²î¾î »ý¼ºµÉ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. ÇØ¼­, ¼­¹ö ÄÁÆ®·ÑÀÌ HTML·Î ·»´õµÉ ¶§ ½ÇÁ¦·Î ÇÒ´çµÉ À̸§À» ¾Ë·ÁÁÖ´Â "<%=states.ClientID%>"¸¦ »ç¿ëÇÑ °ÍÀÔ´Ï´Ù. (¹°·Ð, ÇöÀçÀÇ °æ¿ì´Â ±× À̸§ ±×´ë·Î ¸¸µé¾îÁú °ÍÀ̱ä ÇÕ´Ï´Ù¸¸... ^^)

±×¸®°í, À̾ LoadStates(countries) ÇÔ¼ö°¡ Á¸ÀçÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö´Â »ç¿ëÀÚ°¡ ù ¹øÂ° µå·Ó´Ù¿î¿¡¼­ ±¹°¡¸¦ ¼±ÅÃÇÒ °æ¿ì È£ÃâµË´Ï´Ù. ±×¸®°í, ¹Ù·Î ÀÌ ÇÔ¼ö°¡ ºñ µ¿±â È£ÃâÀ» ¼öÇàÇÏ´Â ÇÙ½É ÇÔ¼öÀ̱⵵ ÇÏÁÒ. ±×·¯¸é, ±× ¶§ ¾î¶°ÇÑ ÀÏÀÌ ÀϾ´ÂÁö ÀÌÁ¦ LoadStates ÇÔ¼öÀÇ ³»ºÎ¸¦ Çѹø »ìÆìº¸µµ·Ï ÇϰڽÀ´Ï´Ù.

¿ì¼±Àº ù ¹øÂ° µå·Ó´Ù¿î ÄÁÆ®·Ñ(countries)¿¡¼­ ÇöÀç ¼±ÅÃµÈ ±¹°¡ °ªÀ» ¾ò¾î¿Í¼­ countryId¶ó´Â Áö¿ª º¯¼ö¿¡ ´ã½À´Ï´Ù. ±×¸®°í, ±× ¼±ÅÃµÈ °ªÀÌ 0º¸´Ù Å©´Ù¸é Áï, ¾î¶² ±¹°¡°¡ ¼±ÅÃµÈ »óŶó¸é ºñ µ¿±â È£ÃâÀ» ¼öÇàÇϰí, ¼±ÅÃµÈ °ªÀÌ 0À̶ó¸é µÎ ¹øÂ° µå·Ó´Ù¿î ÄÁÆ®·ÑÀ» ÃʱâÈ­ÇÏ´Â ÀÛ¾÷À» ¼öÇàÇÕ´Ï´Ù.

function LoadStates(countries)
{
    var countryId = countries.options[countries.selectedIndex].value;
    if (countryId > 0)
    {
        //DropDownLink´Â ¿ì¸®°¡ µî·ÏÇØ ³õÀº ŸÀÔ ¸íÀ̱⿡, Ajax.NET¿¡ Á¤ÀǵǾî ÀÖ´Ù
        DropDownLink.GetStates(countryId, LoadStates_CallBack);
    }
    else
    {
        // states µå·Ó´Ù¿îÀ» ±ú²ýÀÌ ºñ¿î´Ù.
        states.options.length = 0;
    }
}

ÇÙ½ÉÀº DropDownLink.GetStates(countryId, LoadStates_CallBack); ÀÔ´Ï´Ù. ÀÌ ºÎºÐÀÌ Àç¹ÌÀÖ´Â ºÎºÐÀÔ´Ï´Ù. ¼­¹ö¿¡ Á¸ÀçÇϴ ƯÁ¤ ¼­¹öÇÔ¼ö·ÎÀÇ ºñ µ¿±â È£ÃâÀ» Çϱâ À§Çؼ­ ¾î¶² ½ÄÀ¸·Î Á¢±ÙÇØ¾ß ÇÏ´ÂÁö¸¦ º¸¿©ÁÖ´Â ÄÚµåÀÌÁÒ. º¸½Ã´Ù½ÃÇÇ, DropDownLink.GetStates ¶ó´Â ÄÚµå·Î ¼­¹ö ÇÔ¼ö¸¦ Á¢±ÙÇϰí ÀÖ½À´Ï´Ù. ±ÔÄ¢Àº ´ÙÀ½°ú °°½À´Ï´Ù.

[ºñ µ¿±â È£Ãâ¿ë Ajax Ŭ·¡½º¸í].[È£ÃâÇÒ Ajax ¸Þ¼­µå] (ÇÊ¿äÇÑ ÀÎÀÚ, Äݹé ÇÔ¼ö¸í)

¾ÕÀÇ aspx Äڵ忡¼­ ¿ì¸®´Â Page_Load ½Ã¿¡ Ajax¿ë Ŭ·¡½º¸¦ DropDownLink·Î µî·ÏÇß°í, ¶ÇÇÑ Ajax È£Ãâ¿ë ¸Þ¼­µå·Î GetStates¸¦ ¸¸µé¾î µÎ¾ú±â¿¡, È£ÃâÇÏ´Â ¹®¹ýÀº

DropDownLink.GetStates(countryId, LoadStates_CallBack);

¿Í °°ÀÌ ±¸¼ºµÇ´Â °ÍÀÔ´Ï´Ù. Àç¹ÌÀÖ´Â °ÍÀº ¸Þ¼­µåÀÇ µÎ ¹øÂ° ÀÎÀÚÀÎ LoadStates_CallBack ÀÔ´Ï´Ù. ÀÌ´Â ºñ µ¿±â È£ÃâÀ» ¼öÇàÇÏ°í ±× °á°ú¸¦ ¹Þ°Ô µÇ´Â JavascriptÀÇ Äݹé ÇÔ¼ö¸¦ ÁöÁ¤ÇÏ´Â ºÎºÐÀÔ´Ï´Ù. ´Ù½Ã ¸»Çؼ­, ¼­¹ö·ÎÀÇ ºñ µ¿±â È£ÃâÀ» ¼öÇàÇÑ µÚ, °á°ú µ¥ÀÌÅ͸¦ LoadStates_CallBack¶ó´Â Javascript ÇÔ¼ö¿¡°Ô ³Ñ°ÜÁÖ°Ú´Ù´Â Àǹ̰¡ µÇ´Â °ÍÀÌÁÒ.

°í·Î, LoadStates_CallBack¶ó´Â À̸§ÀÇ Javascript ÇÔ¼öµµ Á¸ÀçÇØ¾ß ÇÕ´Ï´Ù. ±×¸®°í, ÀÌ Äݹé ÇÔ¼öÀÇ ¿ªÇÒÀº ¼­¹ö¿¡¼­ ³Ñ°ÜÁØ °á°ú µ¥ÀÌÅ͸¦ °¡Áö°í À¥ ÆäÀÌÁö¿¡ µ¿ÀûÀ¸·Î ¹Ý¿µÇÏ´Â ¿ªÇÒÀ» ¼öÇàÇØ¾ß ÇÒ °ÍÀÔ´Ï´Ù.

ÇØ¼­, À̾îÁö´Â Äڵ尡 ¹Ù·Î ±×°ÍÀÔ´Ï´Ù.

// Ajax.NETÀÌ ÀÀ´ä µ¥ÀÌÅ͸¦ Àü´ÞÇÏ´Â Äݹé ÇÔ¼ö
function LoadStates_CallBack(response)
{
    // ¸¸ÀÏ, ¼­¹ö Äڵ尡 ¿¹¿Ü¸¦ ÀÏÀ¸Å²´Ù¸é
    if (response.error != null)
    {
        alert(response.error); //¾Æ¸¶µµ À̺¸´Ù´Â ´õ ³ªÀº 󸮰¡ ÇÊ¿äÇÒ °ÍÀÌ´Ù.
        return;
    }

    var states = response.value;
    // ±â´ëÇß´ø ÀÀ´ä µ¥ÀÌÅͰ¡ ¾Æ´Ï¶ó¸é
    if (states == null || typeof(states) != "object")
    {
        return;
    }

    statesList.options.length = 0; //reset the states dropdown
    // JavaScript´Â ´ë,¼Ò¹®ÀÚ¸¦ ±¸ºÐÇϱ⿡ LengthÀÇ LÀº ¹Ýµå½Ã ¼Ò¹®ÀÚ·Î ÇØ¾ß ÇÑ´Ù.
    // (¾Æ¸¶µµ °³¹ßÀÚ°¡ ±×·¸°Ô Á¤ÀÇÇØ ³õÀº µíÇÏ´Ù)
    for (var i = 0; i < states.Rows.length; ++i)
    {
        statesList.options[statesList.options.length] = new Option(states.Rows[i].State, states.Rows[i].Id);
    }
}
</script>

¼­¹ö¿¡¼­ ó¸®µÈ °á°ú´Â ÇÔ¼öÀÇ ÀÎÀÚÀÎ response·Î ³Ñ¾î¿À°Ô µË´Ï´Ù. ÀÌ ¹æ½ÄÀº Webservice Behavior¸¦ »ç¿ëÇÒ °æ¿ì(¼¼ ¹øÂ° °­ÁÂ)¿Í µ¿ÀÏÇÕ´Ï´Ù. ^^

Äڵ带 ÁÖ~¿í ¼³¸íÇÏÀÚ¸é ´ÙÀ½°ú °°½À´Ï´Ù.

1. ¿¡·¯°¡ ¹ß»ýÇß´Ù¸é, ¿¡·¯ ¸Þ½ÃÁö¸¦ ¸Þ½ÃÁö¹Ú½º·Î ³ªÅ¸³»°í ÀÛ¾÷À» Æ÷±âÇÑ´Ù.
2. ÀÀ´ä µ¥ÀÌÅ͸¦ states º¯¼ö¿¡ ´ãÀº ´ÙÀ½, ±× °ªÀÌ null À̰ųª, ±× Çü½ÄÀÌ object°¡ ¾Æ´Ï¶ó¸é
    ÀÛ¾÷À» ¿ª½Ã Æ÷±âÇÑ´Ù.
3. µÎ ¹øÂ° µå·Ó´Ù¿î ÄÁÆ®·ÑÀ» ÃʱâÈ­ Çϰí, statesÀÇ Çà ¸¸Å­ ¹Ýº¹Çϸ鼭 µ¥ÀÌÅ͸¦ ²¨³»
    µå·Ó´Ù¿î ÄÁÆ®·Ñ¿¡ Ãß°¡ÇÑ´Ù.

Àç¹ÌÀÖ´Â ºÎºÐÀº ¼­¹ö¿¡¼­ ¹ÝȯµÈ DataView µ¥ÀÌÅ͸¦ ¸¶Ä¡ ½ÇÁ¦ DataView¸¦ ¾²´Â °Íó·³ states.Rows[i].State, states.Rows[i].Id¿Í °°Àº ½ÄÀ¸·Î Á¢±ÙÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. ÀÌ´Â Ajax.NETÀ» Á¦ÀÛÇÑ Schwarz°¡ Ãß°¡ÀûÀ¸·Î ½ºÅ©¸³Æ® ÀÛ¾÷À» ÇØ µÎ¾ú±â¿¡ °¡´ÉÇÑ °ÍÀÔ´Ï´Ù.

¾î¶»½À´Ï±î? Å©°Ô ¾î·ÆÁö´Â ¾ÊÁÒ?

»ç½Ç, ¸¹Àº ÀÛ¾÷ÀÌ Webservice Behavior °­Á¿¡¼­ ´Ù·ç¾ú´ø ºÎºÐ°ú À¯»çÇÕ´Ï´Ù. ¾Æ¸¶µµ ±×·¸°Ô ´À³¢½Å ºÐÀÌ ¸¹À» °ÍÀÔ´Ï´Ù. ´Ù¸¸, Á÷Á¢ XMLHTTP¸¦ ´Ù·ç¾úÀ» ¶§¿¡ ºñÇØ ÆíÇØÁø Á¡À̶ó¸é,

1. ¼­¹ö ¸Þ¼­µå¸¦ ±»ÀÌ À¥ ¼­ºñ½º ¸Þ¼­µå·Î ¸¸µéÁö ¾Ê¾Æµµ µÈ´Ù´Â Á¡
2. ±×·³À¸·Î ÇØ¼­, ¼­¹ö ÂÊ ¸ðµâ ±¸¼ºÀÌ »ó´ëÀûÀ¸·Î ÆíÇØÁ³´Ù´Â Á¡
3. È£ÃâÇÒ ¼­¹ö ÆäÀÌÁöÀÇ °æ·Î¸¦ ÁöÁ¤ÇÏÁö ¾Ê¾Æµµ µÈ´Ù´Â Á¡
4. Javascript¿¡¼­ ºñ µ¿±â È£ÃâÀ» À§ÇØ ÇÊ¿äÇÑ Äڵ尡 °£¼ÒÇØÁ³´Ù´Â Á¡

µîÀ» µé ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.

±×¸®°í, ÀÌ·¯ÇÑ ÀåÁ¡ Áß ÁÁÀº Á¡µéÀº ASP.NET 2.0 Atlas¿¡µµ ¹Ý¿µÀÌ µÇ°í ÀÖ½À´Ï´Ù. AtlasÀÇ ¾ËÆÄ¹öÀüÀ» »ìÆìº¸¸é, ¼­¹ö ¸ðµâÀ» À¥ ¼­ºñ½º·Î Á¦ÀÛÇØ¾ß ÇÑ´Ù´Â ºÎºÐ¸¸ Á¦¿ÜÇÏ¸é ´Ù¸¥ ÀåÁ¡µéÀº ÁÁÀº Á¡¸¸ ½ï½ï »Ì¾Æ¼­ °í½º¶õÈ÷ ³ì¾ÆÀÖ½À´Ï´Ù. ^^

¼­¹ö ¸ðµâÀ» À¥ ¼­ºñ½º·Î ºÐ¸®ÇÏ´Â ºÎºÐÀº ¼­¹ö ¸ðµâÀÇ Àç »ç¿ë¼º ¹× ¿ÜºÎ ÀÎÅÍÆäÀ̽º¿ÍÀÇ ÅëÇÕÀ» À§Çؼ­µµ Ź¿ùÇÑ ¼±ÅÃÀ̶ó »ý°¢ÇÕ´Ï´Ù. AtlasÀÇ ½ÇÁ¦ ¸ð½ÀÀº ¶Ñ²±À» ¿­¾îºÁ¾ß ¾Ë ¼ö ÀÖ´Â ºÎºÐÀ̱ä ÇÏÁö¸¸, ±×·¡¼­ »ìÆ÷½Ã ±â´ë°¡ µÇ´Â °ÍÀº »ç½ÇÀÔ´Ï´Ù.

¾î¶²°¡¿ä? Å©°Ô ¾î·ÆÁö°¡ ¾ÊÁÒ? ¸Ç¶¥¿¡¼­ ±¸ÇöÇÏ´Â °Íº¸´Ù Ajax.NET°ú °°Àº µµ±¸¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÈξÀ °³¹ßÇϱⰡ ¼ö¿ùÇÏ´Ù´Â °ÍÀ» ´À³¢½Ç °Ì´Ï´Ù. ^^

±×·±µ¥, ÀÌ°Ô ³¡ÀÌ ¾Æ´Õ´Ï´Ù. Ajax.NETÀ» ÀÌ¿ëÇÏ´Â °æ¿ì¿¡´Â ÇöÀç ÇÑ °¡ÁöÀÇ ´ÜÁ¡À» °¡Áö°í ÀÖ½À´Ï´Ù. ¹°·Ð, À̸¦ Ajax.NETÀÇ ¹®Á¦¶ó°í ´ÜÁ¤ÀûÀ¸·Î À̾߱âÇϱâ´Â Á» ±×·¸½À´Ï´Ù¸¸ ¸»ÀÔ´Ï´Ù. ±×°ÍÀº ¹Ù·Î µ¿ÀûÀ¸·Î µ¥ÀÌÅ͸¦ ä¿î ÄÁÆ®·ÑÀÇ VIEWSTATE´Â À¯ÁöµÇÁö ¾Ê´Â´Ù´Â °ÍÀÔ´Ï´Ù(¾îÂ¸é ´ç¿¬ÇÑ À̾߱â°ÚÁö¸¸ ¸»ÀÔ´Ï´Ù)

ÀÌÇØ°¡ µÇÁö ¾Ê´Â´Ù±¸¿ä? ±×·¸´Ù¸é, ´ÙÀ½°ú °°Àº »óȲÀ» »ý°¢ÇØ º¸½Ã¸é ½±´Ï´Ù.

DropDownLink µ¥¸ð¿¡¼­, ±¹°¡¸¦ ¼±ÅÃÇÏ¸é µÎ ¹øÂ° µå·Ó´Ù¿î¿¡ ÁÖ(State) ¸íÀÌ ÁÖ¿í ³ªÅ¸³ªÁÒ? ¹°·Ð, ±× µ¥ÀÌÅÍ´Â ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ ÅëÇØ¼­ µ¿ÀûÀ¸·Î ³ÖÀº µ¥ÀÌÅÍÀÏ °ÍÀÔ´Ï´Ù. ±× »óÅ¿¡¼­ ¼­ºê¹Ô ¹öưÀ» Ŭ¸¯ÇÏ¸é ¾î¶»°Ô µÉ±î¿ä?

ÆäÀÌÁö´Â Æ÷½ºÆ®¹éÀÌ µÉ °ÍÀ̰í, ÇöÀç ¼±ÅÃµÈ ±¹°¡¸í°ú ÁÖ¸íÀÌ È­¸é¿¡ ÂïÇô ³ª¿À°Å³ª ÇÒ °ÍÀÔ´Ï´Ù. ±×·±µ¥, Æ÷½ºÆ®¹éµÈ È­¸é¿¡¼­´Â ÁÖ¸íÀ» ³ª¿­ÇÏ´Â µÎ ¹øÂ° µå·Ó´Ù¿î ÄÁÆ®·ÑÀÇ µ¥ÀÌÅÍ´Â ¸ðµÎ »ç¶óÁú °ÍÀÔ´Ï´Ù. ±× µ¥ÀÌÅÍ´Â Javascript¸¦ ÅëÇØ¼­ µ¿ÀûÀ¸·Î ³ÖÀº °ªÀÎÁö¶ó ¼­¹ö¿¡¼­´Â ±× °ª¿¡ ´ëÇØ¼­ ÀüÇô ¸ð¸£±â ¶§¹®ÀÔ´Ï´Ù.

ÇØ¼­, ´ë¾ÈÀ¸·Î DropDownLink.aspx µ¥¸ð¿¡¼­´Â ¹öư Ŭ¸¯ À̺¥Æ®(ÄÚµå ºñÇÏÀÎµå ÆÄÀÏ)¿¡¼­ ´ÙÀ½°ú °°Àº 󸮸¦ Ãß°¡ÀûÀ¸·Î Çϰí ÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.

    private void submit_Click(object sender, EventArgs e)
    {
        //states µå·Ó´Ù¿îÀº Ŭ¶óÀÌ¾ðÆ® Ãø¿¡¼­ °ªÀ» ä¿ü´Ù´Â °ÍÀ» ±â¾ïÇ϶ó.
        //ÀÌ´Â ±× °ªµéÀÌ viewstate¿¡ À¯ÁöµÇÁö ¾Ê´Â´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
        //±×·¸±â¿¡, µå·Ó´Ù¿î¿¡¼­ ¼±ÅÃµÈ °ªÀ» ¾ò¾î¿À´Â À¯ÀÏÇÑ ¹æ¹ýÀº Request.FormÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù.
        string selectedStateId = Request.Form[states.UniqueID];
        Response.Write("You selected province/state id: " + selectedStateId);

        //ÀÌ´Â, »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ °ªÀ» Æû¿¡ ³ªÅ¸³»·Á ÇÒ °æ¿ì Ãß°¡ ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
        states.DataSource = DAL.GetCountryStates(Convert.ToInt32(countries.SelectedIndex));
        states.DataTextField = "State";
        states.DataValueField = "Id";
        states.DataBind();
        states.SelectedIndex = states.Items.IndexOf(states.Items.FindByValue(selectedStateId));     }

ÀÌ ÀÛ¾÷Àº ÁÖ¼®¿¡¼­ ´ë·«ÀûÀ¸·Î ¼³¸íÇϰí ÀÖµíÀÌ »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ±¹°¡¸íÀ» °¡Áö°í, ¼­¹ö¿¡¼­ ±× ±¹°¡¿¡ ÇØ´çÇÏ´Â ÁÖ(state)¸íÀ» ¾ò¾î¿Í µÎ ¹øÂ° µå·Ó´Ù¿î¿¡ ä¿î ´ÙÀ½, »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ °ªÀ» µå·Ó´Ù¿î ÄÁÆ®·Ñ¿¡¼­ ¼±ÅÃµÈ °ÍÀ¸·Î Ç¥ÇöÇÏ´Â °ÍÀÔ´Ï´Ù.

ÀÌ´Â ¹º°¡ ¹Ýº¹ÀûÀÎ ÀÛ¾÷ÀÌ ¾Æ´Ï³Ä´Â º¼¸à ¼Ò¸®°¡ ³ª¿Ã ¼öµµ ÀÖ°ÚÁö¸¸, ¾î¿ ¼ö ¾øÀÌ Ã³¸®ÇØ Áà¾ß ÇÏ´Â ºÎºÐÀÔ´Ï´Ù. »ç½Ç, ÀÌ ºÎºÐµµ ±×³ª¸¶ ASP.NETÀ» ÀÌ¿ëÇϴϱî ÀÌ Á¤µµÀÇ Ã³¸®·Î °¡´ÉÇÑ ºÎºÐÀÔ´Ï´Ù. ASP ½ÃÀý¿¡ ÀÌ¿Í °°Àº 󸮸¦ ÇÏ·Á¸é ¼ö¸¹Àº Javascript Äڵ带 ÀÌ¿ëÇØ¼­ Ŭ¶óÀÌ¾ðÆ® Ãø¿¡¼­ µ¥ÀÌÅ͸¦ ´Ù½Ã ä¿ì´Â ÀÛ¾÷À» ¹Ýº¹ÇØ¾ß ÇÒÅ״ϱî¿ä.

¾î·µç ÀÌ·Î½á ¿¹Á¦´Â ¸¶¹«¸® µÇ¾î ÀÖ½À´Ï´Ù.

ÇÁ·Î±×·¡¹Ö ¹æ½ÄÀ» ¸ðµÎ ´Ù È®ÀÎÇÑ Áö±ÝÀÇ ¿©·¯ºÐÀ̶ó¸é, 'Ajax ÇÁ·Î±×·¡¹ÖÀÌ ±×´ÙÁö ½±Áö ¾Ê³×~ ¾ê ¹¹¾ß..' ÇÒ Áöµµ ¸ð¸£°Ú½À´Ï´Ù¸¸, ÀÌ´Â ¸Ç¶¥ºÎÅÍ ÀÛ¾÷ÇÏ´Â ¹æ½Ä¿¡ ºñÇÏ¸é »ó´çÈ÷ °³¹ßÀÌ ½¬¾îÁø ÇüÅÂÀÔ´Ï´Ù. Ajax ½ºÅ¸ÀÏÀÇ ÇÁ·Î±×·¡¹ÖÀ» ÀÌ¹Ì Á¢Çغ» °³¹ßÀÚ¶ó¸é Á¦ Àǰ߿¡ µ¿°¨ÇÏ½Ç °ÍÀÔ´Ï´Ù.

Ajax°¡ ¾ÕÀ¸·ÎÀÇ ¼¼»óÀ» ¹Ù²Ü °ÍÀ̰í, Æí¸®ÇÏ°Ô ¸¸µé °ÍÀ̶ó´Â ºÐÀ§±â°¡ Á¶¼ºµÇ¾î °¡°í ÀÖÁö¸¸ ÀÌ´Â »ç½Ç »ç¿ëÀÚ Ãø¸é¿¡ ÇØ´çÇÏ´Â °ÍÀÌÁö °³¹ßÀÚ Ãø¸éÀ̶ó°í º¸±â´Â Á¶±Ý ¾Ö¸ÅÇÕ´Ï´Ù. »ç½Ç, Ajax¸¦ µµÀÔÇÏ¸é »ç¿ëÀÚÀÇ »ç¿ë¼ºÀº ÁÁ¾ÆÁúÁö ¸ð¸£°ÚÁö¸¸, À̸¦ °³¹ßÇϰí Àû¿ëÇÏ´Â °³¹ßÀÚ Ãø¸é¿¡¼­´Â ¼ÕÀÌ ´õ ¸¹ÀÌ °¡°Ô µÇ´Â °ÍÀÌ »ç½ÇÀ̱⠶§¹®ÀÔ´Ï´Ù. ÇØ¼­, ±×·¯ÇÑ °³¹ß »ý»ê¼ºÀ» ´õ¿í ³ôÀ̰íÀÚ MS¸¦ ºñ·ÔÇÑ ¾÷üµéÀÌ Ajax¿ë ÇÁ·¹ÀÓ¿öÅ©¸¦ °³¹ßÇϰí ÀÖ´Â °ÍÀÌÁÒ. ¸»¾¸µå·È´Ù½ÃÇÇ, Atlas°¡ ¹Ù·Î ±×·± ¸ñÀûÀ¸·Î ÁغñµÇ°í ÀÖ°í¿ä.

Atlas°¡ ³ª¿Ã °æ¿ì, ¾ó¸¶³ª °³¹ß »ý»ê¼ºÀÌ ³ô¾ÆÁú °ÍÀΰ¡´Â ¶Ñ²±À» ¿­¾îºÁ¾ß ¾Ë ¼ö ÀÖ´Â ºÎºÐÀ̶ó Á¦°¡ ¸»¾¸µå¸®±â Á¶½É½º·´Áö¸¸, ¾ËÆÄ¹öÀüÀ» »ìÆ÷½Ã ¸À º» ÀÔÀå¿¡¼­ ¸»¾¸µå¸®ÀÚ¸é, Àû¾îµµ Ajax.NETÀ» ÀÌ¿ëÇÏ´Â °Íº¸´Ù´Â »ó´çÈ÷ ³ªÀ» µí ÇÏ´Ù´Â ´À³¦ÀÔ´Ï´Ù.

Áß¿äÇÑ °ÍÀº Ajax¿ë ÇÁ·¹ÀÓ¿öÅ©°¡ Á¦°øµÇ´ø, Á¦°øµÇÁö ¾Ê´ø °³¹ßÀÚ´Â °¡´ÉÇÏ´Ù¸é AjaxÀÇ ³»ºÎÀûÀÎ È帧°ú ÇÁ·Î¼¼½º¸¦ ÀÌÇØÇϰí ÀÖÀ» Çʿ䰡 ÀÖ´Ù´Â Á¡ÀÔ´Ï´Ù. ±×·¸´Ù¸é, °£È¤ ÁÖ¾îÁö´Â ³­Á¦¸¦ Ç®¾î ³¾ ½Ç¸¶¸®¸¦ ½º½º·Î ã¾Æ³¾ ¼ö ÀÖÀ»Å״ϱî¿ä. ´Ü¼øÈ÷, °®ÃçÁø Ʋ ¾È¿¡¼­¸¸ ÇÁ·Î±×·¡¹ÖÀÌ °¡´ÉÇÏ´Ù¸é °í°´ÀÇ Æ¯º°ÇÑ ¿ä±¸»çÇ×ÀÌ ÀÖÀ» °æ¿ì ¸·´Ù¸¥ ±æ¿¡ ¸·Èù µíÇÑ »óȲÀ» Á¢ÇÏ°Ô µÉ °¡´É¼ºÀÌ Å®´Ï´Ù. Áï, 'ÀÌ°Ç ¿ø·¡ ¾È µÇ¿ä(¼ÓÀ¸·Î´Â °¡´ÉÇÑ ¹æ¹ýÀÌ ÀÖÀ» °Í °°±ä Çѵ¥.. Çϸ鼭)' ¿Í °°Àº ¸»·Î µÑ·¯´ë¾ß¸¸ ÇÏ´Â.. ½½Ç »óȲÀ» °æÇèÇÏ°Ô µÉ °ÍÀ̶ó´Â À̾߱é´Ï´Ù. ¾È µÈ´Ù°í À̾߱âÇÒ ¶§´Â ²¨¸²Á÷ÇÑ ±¸¼® ¾øÀÌ ´ÜÈ£ÇϰÔ!! 'ÀÌ°Ç ¾ÈµË´Ï´Ù' ¶ó°í ½Ã¿øÇÏ°Ô À̾߱âÇÒ ¼ö ÀÖ´Â °³¹ßÀÚÀÌ°í ½Í´Ù¸é.. ¹é±×¶ó¿îµåµµ Á¶±ÝÀº »ìÆìºÁ µÎ½Ã´Â °ÍÀÌ ÁÁ½À´Ï´Ù(Àû¾îµµ ÀÌÀü Á¦ °­Á¸¦ »ìÆìº¸½Å´Ù¸é ±×°ÍÀ¸·Îµµ ¾î´À Á¤µµ´Â ÃæºÐÇÏÁö ¾Ê³ª ÇÏ´Â.. -_-;; ºÎÁ·ÇѰ¡¿©? ±×·³ ¾î¼Áö???).

»ç½Ç, Àúµµ ÀÌ·± ¸» ÇÒ ÀÚ°ÝÀº ¾ø´Â »ç¶÷ÀÔ´Ï´Ù¸¸¡¦ ¸»ÀÔ´Ï´Ù. ±×·¡¼­, ´õ¿í ³ë·ÂÇÏ´Â »îÀ» »ì¾Æ¾ß ÇÏÁö ¾Ê³ª »ý°¢ÇÏ¸ç ¹Ý¼ºÇÕ´Ï´Ù.

È÷Èý. À̹ø °­Á´ Á» ¸¹ÀÌ ±æ¾ú´Âµ¥¿ä. ^^ ±×·¡¼­, °­Á°¡ ¿Ã¶ó¿Â °Íµµ Á» ¸¹ÀÌ ´Ê¾îÁ³ÁÒ? ´ã¿¡´Â Á¶±Ý ´õ ºü¸¥ ÅÒÀ» µÎ°í ¿Ã¶ó¿Ã ¼ö ÀÖµµ·Ï ³ë·ÂÇϰڽÀ´Ï´Ù. ±×·³ ´ÙÀ½ °­Á¿¡¼­ ºÆ¾î¿ä~

°­Á ¸ñ·ÏÀ¸·Î..