lecture Home > ASP.NET > .NET Board

.NET °Ô½ÃÆÇ °­Á - ±è¿¬Áø´Ô Á¦°ø

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2001³â 09¿ù 10ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2001³â 09¿ù 26ÀÏ

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

   °­Á Á¦¸ñ : µåµ®.. ±Û¾²±â : write.aspx

write.aspx

ÀÌÁ¦ ±Û¾²±â¶õºÎÅÍ, ½ÇÁ¦ À¥ ÆäÀÌÁö¸¦ ¸¸µé¾î º¸°Ú½À´Ï´Ù. ¿ì¼± /bin µð·ºÅ͸®¿¡, ÆÄÀÏÀ» Çϳª ´õ ¸¸µì´Ï´Ù. À̸§Àº cstMessageBoard.cs·Î ÇÕ´Ï´Ù.

cstMessageBoard.cs:
using System;
using System.Data;
using System.Data.SqlClient;

namespace cstDB {
  
   public class MessageBoard : OrderedTableReader {

     public MessageBoard( String _tableName ) 
                   : base( _tableName, "seq" ) {}

     public bool AddMessage( 
                   String writer,
                   String email,
                   String title,
                   String pwd,
                   int mode,
                   String content )
     {
        String sql;
        bool ret=false;

        sql = "insert into "+tableName
            + "( writer,email,title,pwd,ip,writeDate,readed,mode,content) "
            + "values( @writer,@email,@title,@pwd,@ip,"
            + "getdate(), 0, @mode, @content )";

        SqlCommand cmd= new SqlCommand(sql, dbConnection );

        cmd.Parameters.Add(new SqlParameter("@writer",
                           SqlDbType.VarChar,20)).Value=writer;
        cmd.Parameters.Add(new SqlParameter("@email",
                           SqlDbType.VarChar,100)).Value=email;
        cmd.Parameters.Add(new SqlParameter("@title",
                           SqlDbType.VarChar,200)).Value=title;
        cmd.Parameters.Add(new SqlParameter("@pwd",
                           SqlDbType.VarChar,20)).Value=pwd;
        cmd.Parameters.Add(new SqlParameter("@ip",
                           SqlDbType.Int)).Value=cstUtil.GetClientIP();
        cmd.Parameters.Add(new SqlParameter("@mode",
                           SqlDbType.TinyInt)).Value=mode;
        cmd.Parameters.Add(new SqlParameter("@content",
                           SqlDbType.Text)).Value=content;

        try {
          cmd.ExecuteNonQuery();
          ret=true;
        }
        catch(Exception) {}
        return ret;
      }
   }
}

OrderedTableReader¸¦ »ó¼Ó ¹Þ¾Æ¼­ MessageBoard ¶ó´Â Ŭ·¡½º¸¦ ¸¸µå´Â °ÍÀÌÁÒ. ±»ÀÌ OrderedTableReader ¶ó´Â Å×À̺íÀ» ³¢¿ö ³ÖÀº °ÍÀº, ±× Ŭ·¡½º¿¡ ´Ù¸¥µ¥¼­µµ ¾²ÀÏ ¸î°³ÀÇ ¸Þ¼­µå¸¦ ³ÖÀ» ¿¹Á¤À̱⠶§¹®Àä, ´ÙÀ½ °­Á¿¡¼­ ¼³¸íÇÏ°Ô µË´Ï´Ù.

MessageBoard¿¡, Áö±ÝÀº AddMessage ¶ó´Â ¸Þ¼­µå ¹Û¿¡ ¾øÁö¸¸, DeleteMessage ( ±Û »èÁ¦ ), ModifyMessage ( ±Û ¼öÁ¤ ), ReadPage ( ±Û ¸ñ·Ï ) µîÀÇ ¸Þ¼­µå°¡ Ãß°¡µÉ °ÍÀÔ´Ï´Ù.

±×¸®°í ¸î°¡Áö ÀÚÁÖ ¾²ÀÏ ÇÔ¼ö¸¦ ³ÖÀ» cstUtil.cs ¶ó´Â ÆÄÀÏÀ» ¸¸µì´Ï´Ù.

cstUtil.cs
using System;
using System.Web;
using System.Text;
using System.Text.RegularExpressions;
using System.Net;

namespace cstDB {
    
    public class cstUtil {
      public static void Die_DoScript( string msg,string script )
      {
        string umsg="<"+"script language="javascript" "+">"
               +"alert(\""+msg+"\");"
               +script
               +"<"+"/script"+">";
        HttpContext.Current.Response.Write(umsg);
        HttpContext.Current.Response.End();
      }

      public static void Die( string msg )
      {
        Die_DoScript( msg, "history.back()" );
      }

      public static void Die_Redirect( string msg, string url )
      {
        Die_DoScript( msg, "location.replace('"+url+"')" );
      }

      public static string Int32ToIP(Int32 ip) 
      {
        IPAddress ipa = new IPAddress(ip);
        return ipa.ToString();
      }

      public static Int32 IPToInt32(string ip)
      {
         return IPAddress.Parse(ip).Address;
      }

      public static Int32 GetClientIP()
      {
        return IPToInt32( HttpContext.Current.Request.UserHostAddress );
      }

      public static string RegExReplace(string str, 
                                        string regexpr, 
                                        string replacement)
      {
        Regex rex=new Regex(regexpr);
        return rex.Replace(str, replacement );
      }

      public static string TagReplace(string src, params string[] tags)
      {
        for( int i=0; i<tags.Length; i++) 
          src=RegExReplace( src, "(\\<\\/?\\s*)("+tags[i]+"[^\\>]*\\>)", "$1_$2" );
        return src;
      }

      public static string LinkURL(string str,string target)
      {
        return RegExReplace(str, 
                 "http\\:\\/\\/\\S+", 
                 "<a href='$0' target='"+target+"'>$0</a>" );
      }

      public static string LinkEmail(string str)
      {
        return RegExReplace( str, 
                 "\\S+\\@\\S+", 
                 "<a href='mailto:$0'>$0</a>" );
      }

      public static string Nl2Br (string src)
      {
        return src.Replace("\n","\n<br>");
      }
    };

};

ÀÌ ÆÄÀÏÀ» ÄÄÆÄÀÏÇØ¾ß °Ú´Âµ¥¿ä, ¾Õ °­Á¿¡¼­ ó·³ cmd¸¦ ½ÇÇà½ÃÄѼ­ /bin Æú´õ·Î À̵¿ÇÑ ÈÄ,

csc /t:library /out:cstDB.dll /debug+ /optimize+ cstDB.cs cstMessageBoard.cs cstUtil.cs

ÀÌ·¸°Ô ÄÄÆÄÀÏÇϸé cstDB.dll ÀÌ ´Ù½Ã ¸¸µé¾îÁú °Ì´Ï´Ù.

1. cstMessageBoard.cs

¿©±â¼± MessageBoard¶ó´Â °´Ã¼°¡ Á¤ÀǵǾú°í, Constructor(»ý¼ºÀÚ)¿Í ¸Þ¼­µå Çϳª°¡ Ãß°¡ µÇ¾ú½À´Ï´Ù.

   public MessageBoard( String _tableName ) 
                 : base( _tableName, "seq" ) {}

¾Õ °­Á¿¡¼­ Àá½Ã ³ª¿ÔÁö¸¸, °´Ã¼ À̸§°ú °°Àº ¸Þ¼­µå´Â Constructor ȤÀº »ý¼ºÀÚ ¶ó°í ÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â °´Ã¼¸¦ »ý¼º½Ãų¶§ ½ÇÇàÇÏ°Ô µÇÁÒ. À§ ó·³ Á¤ÀÇÇß´Ù¸é, MessageBoard mb = new MessageBoard("cstBoard") ½ÄÀ¸·Î »ý¼ºÇϰí mb.AddMessage(...) ½ÄÀ¸·Î ¾²°Ô µË´Ï´Ù. À§ »ý¼ºÀÚ´Â »óÀ§ °³Ã¼( base, Áï OrderedTableReader)ÀÇ »ý¼ºÀÚ¸¦ È£ÃâÇÒ »ÓÀÔ´Ï´Ù. MessageBoard ¶ó´Â °³Ã¼¸¦ ¸¸µé·Á¸é À§Ã³·³ Å×À̺í À̸§À» Á¤Çϵµ·Ï ÇØ³ù´Âµ¥¿ä, À̰ÍÀº ³ªÁß¿¡, ÀÌ ¼Ò½º Çϳª·Î ¿©·¯°³ÀÇ °Ô½ÃÆÇ( ¼ÒÀ§, Multi-°Ô½ÃÆÇ )À» ¸¸µé±â À§Çؼ­ ÀÔ´Ï´Ù.

     public bool AddMessage( 
                   String writer,
                   String email,
                   String title,
                   String pwd,
                   int mode,
                   String content )
    {
    ...
    }

µÎ¹øÂ°·Î ¸¸µç ¸Þ¼­µå´Â À̹ø °­Á¿¡¼­ ¾²ÀÌ°Ô µÉ AddMessage¶õ ¸Þ¼­µåÀä, ±Û¾´ÀÌ, ¸ÞÀÏÁÖ¼Ò, Á¦¸ñ, ¾ÏÈ£, Çü½Ä( Html ÅÂ±× Çã¿ë ¿©ºÎ ), ³»¿ëµîÀ» Àμö·Î ÁÖ¸é ±× °ªÀ» ÀÌ¿ëÇØ¼­ DB¿¡ ÀúÀåÇÏ°Ô µË´Ï´Ù.

        String sql;
        bool ret=false;

        sql = "insert into "+tableName
            + "( writer,email,title,pwd,ip,writeDate,readed,mode,content) "            
            + "values( @writer,@email,@title,@pwd,@ip,"
            + "getdate(), 0, @mode, @content )";

        SqlCommand cmd= new SqlCommand(sql, dbConnection );

insert ¹® »ç¿ëÇØ¼­ ÀúÀåÇÏ°Ô µÇ´Âµ¥¿ä, ÀÔ·ÂÀÏÀÎ writeDate´Â getdate() ÇÔ¼ö·Î ÀÔ·Â ½Ã°£À» ³Ö°í, Á¶È¸ ¼öÀÎ readed´Â 0À¸·Î ÃʱⰪÀ» ÁÝ´Ï´Ù. ±× ¿ÜÀÇ @writer ó·³ @À¸·Î ½ÃÀÛÇÏ´Â °ÍÀº ´ÙÀ½ ó·³ ÆÄ¶ó¸ÞÅ͸¦ ÁöÁ¤Çؼ­ °ªÀ» ³Ö¾îÁÖ°Ô µË´Ï´Ù.

        cmd.Parameters.Add(new SqlParameter("@writer",
                           SqlDbType.VarChar,20)).Value=writer;
        cmd.Parameters.Add(new SqlParameter("@email",
                           SqlDbType.VarChar,100)).Value=email;
        cmd.Parameters.Add(new SqlParameter("@title",
                           SqlDbType.VarChar,200)).Value=title;
        cmd.Parameters.Add(new SqlParameter("@pwd",
                           SqlDbType.VarChar,20)).Value=pwd;
        cmd.Parameters.Add(new SqlParameter("@ip",
                           SqlDbType.Int)).Value=cstUtil.GetClientIP();
        cmd.Parameters.Add(new SqlParameter("@mode",
                           SqlDbType.TinyInt)).Value=mode;
        cmd.Parameters.Add(new SqlParameter("@content",
                           SqlDbType.Text)).Value=content;

ÀÌÀüº¸´Ù ¾à°£ º¹ÀâÇØÁ³³×¿ä. SqlCommand °³Ã¼ÀÇ Parameters ¿¡ Çϳª¾¿ Ãß°¡ÇÏ´Â °ÍÀä,

        cmd.Parameters.Add(new SqlParameter("@writer",
                           SqlDbType.VarChar,20)).Value=writer;

ÀÌ°Ç Á»´õ ±æ°Ô ¾²¸é,

        param = new SqlParameter("@writer",SqlDbType.VarChar,20);
        param.Value=writer;
        cmd.Parameters.Add(param);

ÀÌ·¸°Ôµµ ¾µ ¼ö ÀÖ½À´Ï´Ù. ³Ñ°ÜÁÙ °ª(ÆÄ¶ó¸ÞÅÍ)ÀÇ Çü½Ä( À§¿¡¼­ SqlDbType.VarChar ), ±æÀÌ(À§¿¡¼­ 20)µîµµ Á¤ÇÏ°Ô µË´Ï´Ù. IP °ªÀº ´ÙÀ½¿¡ ¼³¸íÇÒ cstUtil °³Ã¼¿¡ Á¤ÀÇÇØµÐ GetClientIP() ¶ó´Â ¸Þ¼­µå·Î Çö »ç¿ëÀÚÀÇ IP°ªÀ» ³Ö½À´Ï´Ù.

±×¸®°í Äõ¸®¹®À» ½ÇÇàÇÕ´Ï´Ù.

        try {
          cmd.ExecuteNonQuery();
          ret=true;
        }
        catch(Exception) {}
        return ret;

SqlCommandÀÇ ExecuteNonQuery() ¸Þ¼­µå·Î ½ÇÇàÇÕ´Ï´Ù. ¾Õ °­Á¿¡¼­ ¼³¸íÇßÁö¸¸, ExecuteNonQuery´Â °á°ú °ªÀÌ ¾ø´Â Äõ¸®¹® ½ÇÇàÇÒ¶§ ¾²ÀÔ´Ï´Ù.
¿©±â c#¿¡¼­ Á¾Á¾ ¾²ÀÏ ¿¡·¯ ó¸® ±¸¹®ÀÎ try/catch ¹®ÀÌ ¾²¿´´Âµ¥¿ä, ¿ì¼± Äõ¸®¹®À» ½ÇÇàÇØ º¸°í( try ), ¿¡·¯°¡ ³ª¸é ±× ¿¡·¯¸¦ Àâ°Ô(catch) µË´Ï´Ù. catch¿¡´Â ¾Æ¹« ³»¿ëÀÌ ¾ø´Âµ¥¿ä, ÀÌ ¸Þ¼­µå ¸Ç ¾Õ¿¡ ret °ªÀ» false·Î ÇØ³õ¾ÒÀ¸´Ï, ¿¡·¯°¡ ³ª¸é false°¡ ¸®ÅÏµÇ°Ô µË´Ï´Ù. Á¦´ë·Î ½ÇÇàµÇ¸é true°¡ ¸®Åϵǰí¿ä. »ç¿ëÇÒ¶§´Â if(AddMessage(...)) { /*¼º°øÃ³¸®*/ } else { /*½ÇÆÐó¸®*/ } ½ÄÀ¸·Î ¾²¸é µÇ°ÚÁÒ.

* µð¹ö±ëÇÒ¶©, try - catch ¾øÀÌ ÇϽô °ÍÀÌ ³ªÀ» °Ì´Ï´Ù. ´Ù¸¥ ¿¡·¯µµ catch µÇ¾î ¹ö·Á¼­¿ä. ^^;

* ÄÄÆ÷³ÍÆ® dll µð¹ö±ëÇÒ¶§, Response.Write¸¦ ¸ø½á¼­ Àú´Â throw new Exception("lalala"); °°Àº ¹®ÀåÀ» ½ÇÇà½Ãŵ´Ï´Ù. À§¿¡¼­ sql ¹® º¸°í ½ÍÀ¸¸é throw new Exception(sql) ÀÌ µÇ°ÚÁÒ. °á°ú´Â ÇØº¸½Ã¸é ¾Ð´Ï´Ù. - Response.Write¿Í ºñ½ÁÇÑ È¿°ú°¡ ³³´Ï´Ù. À̿ܿ¡, ¾ÆÁ÷Àº Àß ¸ô¶ó ¼³¸í¸øµå¸³´Ï´Ù¸¸, Trace.Write() ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ ÀÖÀ¸´Ï±î¿ä, Trace µµ ã¾Æº¸½Ã±â ¹Ù¶ø´Ï´Ù.

¿©±â¼­ SqlParameter·Î, Äõ¸®¹® ÆÄ¶ó¸ÞÅ͸¦ ÇϳªÇϳª ÁöÁ¤Çϵµ·Ï ÇØ³õ¾Ò´Âµ¥¿ä, Àüó·³, sql = "insert into .... "values( '"+writer+"','"+email+"'....)" ÀÌ·¸°Ô, Á÷Á¢ Äõ¸®¹®¿¡ ÀÛÀº µû¿ÈÇ¥·Î µÑ·¯½×¾Æ¼­ °ªÀ» ³Ö¾îµµ µË´Ï´Ù. ´Ù¸¸ ÀÌ·¸°Ô SqlParameter °³Ã¼¸¦ ÇϳªÇϳª Ãß°¡ÇÏ´Â ¹æ½ÄÀº, ¼Ò½º´Â ¾à°£ ±æ¾îÁöÁö¸¸ ¸î°¡Áö ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù.

  1. varcharÇü °ª ¾È¿¡ ÀÛÀºµû¿ÈÇ¥(') °¡ À־ Á¦´ë·Î º¯È¯µË´Ï´Ù. Áï, Àüó·³ replace·Î ÀÛÀºµû¿ÈÇ¥ Çϳª¸¦ ÀÛÀºµû¿ÈÇ¥ µÎ°³·Î ¹Ù²ÙÁö ¾Ê¾Æµµ µË´Ï´Ù.
  2. ¸¸¾à Á¤ÇØÁø ±æÀ̺¸´Ù ±æ¸é, ±× ±æÀÌ¿¡¼­ À߸®±â ¶§¹®¿¡ ¿¡·¯°¡ ¾È³³´Ï´Ù.
¿¹¸¦µé¾î DB¿¡ varchar(2)À¸·Î Á¤Çسù´Âµ¥, 'aaa' ó·³ ¼¼±ÛÀÚ¸é "String or Binary data would be truncated" ¶ó´Â ¿¡·¯°¡ ³ª°í Á¾·áµÇÁÒ. ±×·±µ¥ À§¿¡¼­ ó·³ SqlParameter¿¡ ±æÀ̸¦ Á¤ÇØµÎ¸é ±× ±æÀÌ¿¡¼­ ÀÚµ¿À¸·Î À߸³´Ï´Ù. ( Áï, 'aa'¸¸ µé¾î°©´Ï´Ù )

±×·±µ¥ À̰Ô, ÇÑ±Û ¹®Á¦´Â ¿©ÀüÈ÷ ³²¾ÆÀÖ½À´Ï´Ù. SqlDbType.VarChar¿¡ ±æÀÌ 10À¸·Î ÇØµµ, ÇÑ±Û 10ÀÚ¸é 20byte°¡ µÇ¾î ¿¡·¯°¡ ³ª°Ô µË´Ï´Ù. VarChar ´ë½Å NVarChar·Î ÇÏ¸é µË´Ï´Ù¸¸, ³¶ºñÇÏ´Â °Í °°¾Æ¼­ »ç¿ëÇϱâ Á» ±×·¸´õ±º¿ä(¿µ¾îµµ 2byte·Î µé¾î°©´Ï´Ù).
Á¦ °æ¿ì º¸Åë, Å×À̺íÀº ÇÊµå±æÀ̸¦ µÎ¹è·Î Àâ¾Æ¼­, VarChar(20)À¸·Î Àâ¾ÒÀ¸¸é, SqlParameter¿¡´Â ±æÀ̸¦ 10À¸·Î ÇÕ´Ï´Ù. ±×·³ ¿¡·¯´Â ¾È³³´Ï´Ù¸¸, ¿µ¹®µµ 10ÀÚ¿¡¼­ À߸®´Â ¹®Á¦°¡ ÀÖÁÒ. ÇѱÛ/¿µ¹®µû¶ó ½ÇÁ¦ ¹ÙÀÌÆ®¼ö ±¸Çؼ­ Àß¶ó³ÖÀ» ¼ö ÀÖ°Ú½À´Ï´Ù¸¸, º¹ÀâÇϱ⸸ ÇÑ°Í °°¾Æ ´Ù·çÁö ¾Ê½À´Ï´Ù.

cstUtil.cs

¿©±â¿¡´Â ¸î°¡Áö Á¾Á¾ ¾²ÀÌ°ÔµÉ ÇÔ¼öµéÀ» ³Ö¾î³ù½À´Ï´Ù. ¸ðµÎ static ÇÔ¼öµéÀä, staticÀÌ¶ó¼­ new·Î »ý¼º ¾ÈÇϰí, cstUtil.Die("...") ½ÄÀ¸·Î ¾²°Ô µË´Ï´Ù. ¾Õ °­Á¿¡¼­ ¼³¸íµå·Èµí, ¿¹ÀüÀÇ Àü¿ª ÇÔ¼ö/º¯¼ö ¾²°í ½ÍÀ¸½Ã¸é ¿øÇÏ´Â °³Ã¼¿¡ ¸ô¾Æ³Ö°í, ¼±¾ðÇÒ¶§ static ºÙÀÌ¸é µË´Ï´Ù.

* ´å³Ý µµ¿ò¸» º¸½Ã´Ù°¡, Ŭ·¡½º ¸â¹ö¶õ¿¡, Public static (shared) methods/properties ·Î ºÐ·ù µÇ¾î ÀÖ´Â °ÍÀº Ŭ·¡½ºÀ̸§.¸Þ¼­µåÀ̸§ À¸·Î È£ÃâÇÏ°Ô µË´Ï´Ù. ÇÑÆí Public Instance methods/properties ·Î ºÐ·ùµÇ¾î ÀÖ´Â °ÍµéÀº new·Î »ý¼ºÇÑ ÈÄ, »ý¼ºÇѰ³Ã¼À̸§.¸Þ¼­µåÀ̸§À¸·Î È£ÃâÇÏ°Ô µË´Ï´Ù. µµ¿ò¸» º¸½Ç¶§ Âü°íÇϼ¼¿ä.
* MessageBoard mb = new MessageBoard("cstBoard") ½ÄÀ¸·Î »ý¼ºÇϸé, MessageBoard´Â °³Ã¼°í, mb ´Â ±× °³Ã¼ÀÇ ÀνºÅϽºInstance¶ó°í ºÎ¸¨´Ï´Ù. Àúµµ Á» Çò°¥¸®°Ô »ç¿ëÇϰí ÀÖ°í, Çò°¥¸³´Ï¸¸, ÀÏ´Ü Instance ¶æÀº ±×·¸½À´Ï´Ù.
À̰æ¿ì static ¸Þ¼­µå´Â MessageBoard.xxx() ½ÄÀ¸·Î È£ÃâÇÒÅ×°í, Instance ¸Þ¼­µå´Â mb.xxx() ½ÄÀ¸·Î È£ÃâÇϰÚÁÒ

¼¼ºÎ ¼³¸íÀº »ý·«Çϰí¿ä, ¾î¶² ÇÔ¼öµéÀÎÁö¸¸ ¼³¸íÇÏ°í ³Ñ¾î°¡°Ú½À´Ï´Ù.

      public static void Die( string msg )
      public static void Die_DoScript( string msg, string script )
      public static void Die_Redirect( string msg, string url )

Die´Â PHP dieÇÔ¼ö¿¡¼­ µû¿Â À̸§Àä, msg¸¦ alert âÀ¸·Î ¶ç¿ì°í, history.back()À¸·Î ÀÌÀüÆäÀÌÁö·Î µ¹¾Æ°¡´Â ±â´ÉÀ» ÇÕ´Ï´Ù. Die_DoScript( msg, script )´Â msg¸¦ alert âÀ¸·Î ¶ç¿ì°í, script¸¦ ½ÇÇà, Die_Redirect(msg, url)Àº msg¸¦ alertâÀ¸·Î ¶ç¿ì°í url ·Î À̵¿ÇÕ´Ï´Ù. ÆäÀÌÁö ¿¡·¯ 󸮸¦ À§ÇÑ ¸Þ¼­µå µéÀÔ´Ï´Ù.

      public static string Int32ToIP(Int32 ip) 
      public static Int32 IPToInt32(string ip)

Int32ToIP´Â Á¤¼ö·ÎµÈ ip °ªÀ» ¹®ÀÚ¿­·Î, IPToInt32´Â ¹®ÀÚ¿­·Î µÈ ip¸¦ Á¤¼ö·Î ¹Ù²ß´Ï´Ù. ¾ÆÀÌÇÇ´Â ¾Æ½Ã´Ù½ÃÇÇ, 127.0.0.1 ó·³, 0 ~ 255ÀÇ ¼ýÀÚ ³×°³°¡ Á¡À¸·Î ±¸ºÐµÇ¾î À־, Á¤¼ö 4byte ·Î ¹Ù²Ü ¼ö ÀÖ½À´Ï´Ù. DB ÀúÀåÇÒ¶§ ¸îbyte¶óµµ ÁÙ¿©º¸°íÀÚ ¸¸µç ÇÔ¼öÀÔ´Ï´Ù.

* À̰Š¿ø·£ Á» ±ä ÇÔ¼ö¿´´Âµ¥, °­Á ¾²´Ù ã¾Æº¸´Ï IPAddress¶ó´Â °£´ÜÇÑ Å¬·¡½º°¡ ÀÖ´õ±º¿ä. ^^; ¹¹µç »ý°¢³ª¸é ¿ì¼± MSDNÀ» ã¾ÆºÁ¾ß°Ú½À´Ï´Ù.

      public static Int32 GetClientIP()
      {
        return IPToInt32( HttpContext.Current.Request.UserHostAddress );
      }

GetClientIP() ´Â ÇöÀç »ç¿ëÀÚÀÇ IP¸¦ ±¸ÇÏ´Â ¸Þ¼­µåÀä, AddMessage ¸Þ¼­µå¿¡¼­ ¾ÆÀÌÇÇ ³ÖÀ»¶§ ¾²ÀÔ´Ï´Ù. Àüó·³ ¾²ÀÚ¸é, Request.ServerVariables["REMOTE_ADDR"] ÀÌ µÇ°Ú´Âµ¥, ã¾Æº¸´Ï UserHostAddress¶õ ÇÁ·ÎÆÛƼ¸¦ µû·Î Á¦°øÇϳ׿ä. Áö±Ý ÀÌ ¼Ò½º°¡ ÆäÀÌÁö°¡ ¾Æ´Ï¶ó ÄÄÆ÷³ÍÆ®(dll) À̱⠶§¹®¿¡, ÇöÀç »ç¿ëÀÚÀÇ ¾ÆÀÌÇǸ¦ ¾Ë¾Æ³»±â À§Çؼ­ ¾Õ¿¡ HttpContext.Current.À» ºÙ¿´½À´Ï´Ù.

 public static string RegExReplace(string str, string regexpr, string replacement)

À̰ÍÀº Á¤±Ô½Ä(RegularExpression)À» ÀÌ¿ëÇØ¼­ ¹®ÀÚ¿­À» ġȯ(Replace) ÇÏ´Â ÇÔ¼öÀä, ÀÌ ÀÚüº¸´Ù´Â ´ÙÀ½¿¡ ¼³¸íÇÒ ¸Þ¼­µå¿¡¼­ È£ÃâµÇ¾î ¾²ÀÌ°Ô µË´Ï´Ù.

      public static string TagReplace(string src, params string[] tags)
      public static string LinkURL(string str,string target)
      public static string LinkEmail(string str)
      public static string Nl2Br (string src)

À̰ÍÀº ±Û º¸±â(view.aspx) ¿¡ ¾²ÀÏ ¸Þ¼­µåµéÀÔ´Ï´Ù.

TagReplace´Â ÁöÁ¤ÇÑ Å±׸¦ ¾à°£ ¹Ù²ã¼­ ¸ø¾²°Ô(?) ÇÕ´Ï´Ù. ¿¹¸¦µé¾î, s = cstUtil.TagReplace( "<xmp> lalala", "xmp") ÀÌ·¸°Ô Çϸé s¿¡ "<_xmp> lalala" ·Î, ÅÂ±× ¾Õ¿¡ _ °¡ µé¾î°¡¼­, űװ¡ ½ÇÇàÀÌ ¾ÈµË´Ï´Ù. xmp °°Àº ¿äÁÖÀÇ(?) ű׸¦ ½áµµ ½ÇÇà ¾ÈµÇµµ·Ï Çϱâ À§ÇØ ¸¸µç ¸Þ¼­µåÀÔ´Ï´Ù. űװ¡ ¿©·¯°³¸é s = cstUtil.TagReplace( s, "xmp", "pre", "table", "tr", "td" ) ½ÄÀ¸·Î ¿©·¯°³ ½áµµ µË´Ï´Ù.

LinkURL, LinkEmail Àº ±Û ³»¿ëÁß¿¡ http://www.corebiz.co.kr , cassatt@hanmir.com ó·³ urlÀ̳ª ¸ÞÀÏÁÖ¼Ò¿¡ ¸µÅ©¸¦ °É±â À§ÇØ ¸¸µç ¸Þ¼­µåÀÔ´Ï´Ù. Nl2BrÀº PHP¿¡¼­ µû¿Â À̸§Àä, ¸®ÅÏ Äڵ带 <br>·Î ¹Ù²Ù´Â ÀÛ¿ë( New Line to <BR> ) À» ÇÕ´Ï´Ù. ( ¾îµð¿¡ ¾²ÀÏÁö´Â ¾Æ½Ã°ÚÁÒ? )


ÀÌÁ¦ ±Û¾²±â - write.aspx, ½ÇÁ¦ ÆäÀÌÁö¸¦ ÀÛ¼ºÇÒ Â÷·ÊÀÔ´Ï´Ù.

write.aspx:
<%@ Page Language="C#" EnableSessionState="false" Debug="true" %>
<%@ Import Namespace="cstDB" %>
<%@ Register TagPrefix="cst" TagName="header" Src="pagelet/cstHeader.ascx" %>
<%@ Register TagPrefix="cst" TagName="footer" Src="pagelet/cstfooter.ascx" %>

<script runat=server language="C#">

  void SubmitBtn_Click( Object src, EventArgs e ) {
     if( Page.IsValid ) {
        using( MessageBoard cmb=new MessageBoard("cstBoard") )
        {
            bool r=
            cmb.AddMessage( txtWriter.Text,
                            txtEmail.Text,
                            txtTitle.Text,
                            txtPassword.Text,
                            rdoMode.SelectedIndex,
                            txtContent.Text );
          }
        }
        Response.Redirect("list.aspx");
     }
  }

</script>

<html>
<head>
<title>°Ô½ÃÆÇ</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<meta name="Author" content="cassatt">
<link rel="stylesheet" type="text/css" href="stylesheets/cstBoard.css" >
<link rel="stylesheet" type="text/css" href="stylesheets/write.css" >
</head>
<body bgcolor="#ffe0e0">
<cst:header title="ÀÚÀ¯°Ô½ÃÆÇ" runat="server"  />

<form id=writeForm runat="server" >

<table width=600 border=0 cellspacing=0 cellpadding=0 align=center>
  <tr>
    <td class="cwTitle" >  ±Û¾²±â</td>
  </tr>
</table>

<!-- main table start -->

<table width=600 border=0 cellspacing=0 cellpadding=4 align=center class="cwMainBox">
  <tr>
    <td class="cwName" nowrap>À̸§</td>
    <td nowrap>
      <asp:RequiredFieldValidator 
         id="txtWriterValidator" 
         runat="server"
         ControlToValidate="txtWriter" 
         ErrorMessage="À̸§"
         Display="Static" 
         Text="*" />
  </td>
  <td class="cwField" width=1000>
    <ASP:TextBox 
         id=txtWriter 
         name=txtWriter 
         size=10 maxlength=10 
         class="cwTextBox" 
         style="width:200" 
         runat="server" />
    </td>
  </tr>
  <tr>
    <td class="cwName">¸ÞÀÏ</td>
    <td nowrap>
      <asp:RegularExpressionValidator 
         id="txtEmailValidator" 
         runat="server"
         ControlToValidate="txtEmail"
         ValidationExpression="^\s*\S+\@\S+\s*$"
         ErrorMessage="¸ÞÀÏÁÖ¼Ò"
         Display="Static" 
         Text="*" />
  </td>
  <td class="cwField">
    <ASP:TextBox 
         id=txtEmail 
         name=txtEmail 
         size=10 
         class="cwTextBox" 
         style="width:200" 
         runat="server" />
  </td>
  </tr>
  <tr>
    <td class="cwName">Á¦¸ñ</td>
    <td nowrap>
      <asp:RequiredFieldValidator 
         id="txtTitleValidator" 
         runat="server"
         ControlToValidate="txtTitle" 
         ErrorMessage="Á¦¸ñ"
         Display="Static" 
         Text="*" />
  </td>
  <td class="cwField">
    <ASP:TextBox 
         id=txtTitle 
         name=txtTitle 
         size=50 
         runat="server" 
         class="cwTextBox" 
         style="width:100%" />
  </td>
  </tr>
  <tr>
    <td class="cwName">³»¿ë</td>
    <td nowrap> </td>
  <td class="cwField">
    <asp:TextBox 
         TextMode="multiline" 
         id=txtContent 
         class="cwTextBox" 
         rows=15 cols=50 
         runat="server" 
         style="width:100%; overflow:hidden;" />
  </td>
  </tr>
  <tr>
    <td class="cwName">Çü½Ä</td>
    <td> </td>
  <td class=cwField width=1000>
    <asp:RadioButtonList 
      id="rdoMode" 
      RepeatLayout="flow"
      RepeatDirection="Horizontal"
      class="cwField" 
      runat="server">
      <asp:ListItem>ÅØ½ºÆ®</asp:ListItem>
      <asp:ListItem>HTML</asp:ListItem>
    </asp:RadioButtonList>
  </td>
  </tr>
  <tr>
    <td class="cwName" nowrap>ºñ¹Ð¹øÈ£</td>
    <td nowrap>
      <asp:RequiredFieldValidator 
         id="txtPasswordValidator" 
         runat="server"
         ControlToValidate="txtPassword" 
         ErrorMessage="ºñ¹Ð¹øÈ£"
         Display="Static" 
         Text="*" />
  </td>
  <td class="cwField">
    <asp:TextBox 
         TextMode="Password" 
         id=txtPassword 
         size=10 maxlength=10 
         class="cwTextBox" 
         style="width:200" 
         runat="server"/>
  </td>
  </tr>
  <tr>
    <td colspan=2> </td>
    <td class="cwName">
      <asp:ValidationSummary
        id="valSummary"
        HeaderText="<font color=darkred>´ÙÀ½À» Á¤È®È÷ ÀÔ·ÂÇØÁÖ¼¼¿ä</font> : "
        DisplayMode="SingleParagraph"
        runat="server"/>
    </td>
  </tr>
</table>

<table width=600 border=0 cellspacing=0 cellpadding=4 align=center>
  <tr>
    <td>
    <input type=reset class="cwResetBtn" value="´Ù½Ã¾²±â" />
  </td>
  <td align=right>
    <asp:Button 
         class="cwSubmitBtn" 
         Text="±Û ¾² ±â" 
         OnClick="SubmitBtn_Click" 
         runat="server" />
  </td>
  </tr>
</table>

<!-- main table end -->

</form>

<cst:footer runat="server" />

</body>
</html>

µðÀÚÀÎÀº ¸ðµÎ css ÆÄÀÏ·Î »©³õ¾Ò½À´Ï´Ù. /pagelet/Header.ascx ³ª /pagelet/Footer.ascx ´Â ´Ù¿î¹ÞÀº ¼Ò½º¸¦ ÂüÁ¶ÇϽñ⠹ٶø´Ï´Ù. ( º¸½Ã¸é ÀÌÇØ°¡ µÇ½Ç °Ì´Ï´Ù )

<form runat="server">

    <ASP:TextBox 
         id=txtWriter 
         name=txtWriter 
         size=10 
         maxlength=10 
         class="cwTextBox" 
         style="width:200" 
         runat="server" />
...
</form>

¿ì¼±, ¼­¹ö¿¡¼­ ½ÇÇàµÇ´Â Æû( <form runat="server"> ) ÀÌ »ç¿ëµÇ°í¿ä, <input type=text > ´ë½Å À§Ã³·³, ASP:TextBox¶ó´Â ´Ù¸¥ À̸§ÀÇ ÄÁÆ®·ÑÀÌ ¾²À̰í ÀÖ½À´Ï´Ù. ¸¶Áö¸·¿¡ ºÙÀº runat="server" ¶ó´Â °ÍÀÌ ÀÌ Å±װ¡, ¼­¹ö¿¡¼­ ½ÇÇàµÈ´Ù´Â °ÍÀ» ¸»ÇØÁÖÁÒ. ÀÌó·³, html ÅÂ±× ¿Ü¿¡µµ asp.net¿¡¼­ Á¦°øÇÏ´Â ¼­¹ö ÄÁÆ®·ÑµéÀÌ ¿©·µ Á¸ÀçÇÕ´Ï´Ù. °ÅÀÇ ¸ðµç html ÄÁÆ®·ÑÀº ´Ù¸¥ À̸§ÀÇ ¼­¹ö ÄÁÆ®·Ñ µéÀ» °¡Áö°í ÀÖ½À´Ï´Ù.

<input type="text">     -> <ASP:TextBox runat="server" />
<input type="password"> -> <ASP:TextBox TextMode="Password" runat="server"/>
<textarea></textarea>   -> <ASP:TextBox TextMode="MultiLine" runat="server"/>
<input type="button">   -> <ASP:Button runat="server"/>
<input type="radio">    -> <ASP:RadioButton runat="server"/>
                      ȤÀº <ASP:RadioButtonList runat="server">...</ASP:RadioButtonList>

µî ÀÔ´Ï´Ù. À̰ÍÀº html ű×ÀÇ ´Ü¼ø ´ëü Á¤µµÀÔ´Ï´Ù¸¸, ¿©±â¿¡ ´õÇØ¼­, ´Ù¾çÇÑ ¼­¹ö ÄÁÆ®·Ñ µéÀÌ Á¸ÀçÇÕ´Ï´Ù.

* <form runat="server">¿¡¼­ º¸µí, <input type="text" runat="server" /> ó·³ ´Ù¸¥ html Æû ÄÁÆ®·Ñµµ runat="server" ¸¸ ºÙ¿©Á൵ ¼­¹ö ÄÁÆ®·ÑÀÌ µË´Ï´Ù. »ç¿ë¹ýÀÌ ¾à°£ ´Ù¸£°í¿ä( Text ´ë½Å Value°¡ »ç¿ëµÈ´Ù°Å³ª,...), Å« ÀåÁ¡À̳ª ´ÜÁ¡Àº ... ¾ÆÁ÷ Àß ¸ð¸£°Ú½À´Ï´Ù. -.-

* <ASP:TextBox runat="server" /> ¿©±â¼­ űװ¡ /> ·Î ³¡³ª´Âµ¥¿ä, </ASP:TextBox> ½ÄÀ¸·Î, ´Ý´Â űװ¡ ¾øÀÌ Å±×ÇϳªÀ϶© ÀÌó·³ ²À /> ·Î ³¡³»¾ß ÇÕ´Ï´Ù. xml ÇüÅÂÀε¥, ¼­¹ö ÄÁÆ®·ÑÀº ÀÌ ·êÀ» ÁöÄÑ¾ß ÇÕ´Ï´Ù.

¾Æ¹«Æ°, "¼­¹ö" ÄÁÆ®·Ñ, ¿©±â¼­ "¼­¹ö"´Â ¹«¾ùÀ» ¶æÇÏ´Â °ÍÀΰ¡? °£´ÜÈ÷ ¸»Çؼ­, ¼­¹ö¿¡¼­ ½ÇÇàµÇ´Â ¼Ò½º¿¡¼­ txtWriter.Text ó·³ ÇØ´ç ÄÁÆ®·ÑÀÇ °ªÀ» ±×³É °¡Á®¿Ã ¼öµµ ÀÖ°í,

<asp:Button ... OnClick="SubmitBtn_Click" runat="server" />

ÀÌó·³ ButtonÀ» Ŭ¸¯ÇßÀ»¶§( OnClick À̺¥Æ® ½Ã¿¡ ) ¼­¹ö¿¡¼­ ¹«½¼ ÀÏÀ» ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù´Â ¾ê±âÀÔ´Ï´Ù. ¼­¹ö¿¡¼­ ½ÇÇàµÇ´Ï±î¿ä.

»ç¿ëÇÏ´Â ÀÔÀå¿¡¼±, ¹öư Ŭ¸¯½Ã¿¡ (OnClick) ÇØ´ç ÄÁÆ®·ÑÀÇ °ªÀ¸·Î( txtWriter.Text ... ) ¹«¾ùÀ» ÇÏ¸é ±×¸¸ÀÔ´Ï´Ù. À§ ¼Ò½º°¡ º¹ÀâÇØ º¸ÀÏÁö ¸ô¶óµµ ÁÙ±â´Â °£´ÜÇÕ´Ï´Ù. ¹öư OnClick ½Ã¿¡ SubmitBtn_Click À̶õ ¸Þ¼­µå ½ÇÇàÇϰí, ±× ¸Þ¼­µå¿¡¼­ ÇØ´ç ÄÁÆ®·Ñ °ªÀ¸·Î AddMessage¸¦ È£ÃâÇÏ´Â °ÍÀÌÁÒ. ¸¶Ä¡ javascript ¾²µí, ¼­¹ö½ºÅ©¸³Æ®¸¦ ¾²°Ô µÈ °ÍÀÔ´Ï´Ù.

* ±×·¸´Ù ÇØµµ, Ŭ¶óÀ̾ðÆ®/¼­¹ö°¡ µ¿½Ã¿¡ ½ÇÇàµÇ´Â °Ô ¾Æ´Ï¶ó´Â °Í, ¼­¹ö¿¡¼­ html ÆäÀÌÁö¸¦ ¸¸µé¾î¼­ Ŭ¶óÀÌ¾ðÆ®·Î Àü¼ÛÇϰí, Ŭ¶óÀÌ¾ðÆ®¿¡¼­ ÀÔ·Â¹Þ¾Æ ¼­¹ö·Î Àü¼ÛµÇ´Â ·ÎÁ÷À» ÀÌÇØÇÒ Çʿ䰡 ÀÖ´Ù´Â »ý°¢ÀÌ µì´Ï´Ù.

Á¤¸»·Î javascriptó·³, OnClick Áï½Ã ¹«¾ùÀÌ ½ÇÇàµÇ°í, ÅØ½ºÆ® ¹Ú½º¿¡ ÀÔ·ÂµÈ °ªÀ» Á÷Á¢ °¡Á®¿À°í ÇÏ´Â °ÍÀÌ ¾Æ´Õ´Ï´Ù. ½ÇÇàÇØ¼­ ¼Ò½ºº¸±â ÇØº¸½Ã¸é ¾Æ½Ã°ÚÁö¸¸, hidden Çʵ忡 ¿ø·¡ ÀÔ·ÂÇÑ °ªÀ» ÀÎÄÚµùÇØ¼­ ÀúÀåÇϰí, ±× °ªÀ» ´Ù½Ã ¼­¹ö·Î Àü¼ÛÇÏ´Â °ÍÀ» ¹Ýº¹ÇÏ´Â, ¾à°£ º¹ÀâÇÑ ·ÎÁ÷¿¡ ÀÇÇØ ÀÌ·ç¾îÁý´Ï´Ù. ÀÌ°É ¿ÏÀüÈ÷ Àذí ÄÚµùÇØµµ µÉ¸¸Å­ÀÌ¸é »ó°ü¾ø°ÚÁö¸¸, ³ªÁß¿¡ Page.IsPostBack °°Àº ÇÁ·ÎÆÛƼ ÇÒ¶§ ¾îÂ÷ÇÇ ´Ù·ç°Ô µË´Ï´Ù.

°Ô½ÃÆÇ ´äº¯ÇÒ¶§, ASP¿¡¼­ alert âÀ» ¸ø¶ç¿ì´Â°¡, ȤÀº ÀÚ¹Ù½ºÅ©¸³Æ® º¯¼ö¸¦ asp¿¡¼­ ¸ø¾²´Â °¡ ÇÏ´Â Áú¹®À» ÀǿܷΠ¿©·¯¹ø º¸¾Ò½À´Ï´Ù. ±×¶§¸¶´Ù ASP´Â html/javascript ¸¸µå´Â ±â°è´Ù, ASP°¡ º¸±â¿¡ ÀÚ¹Ù½ºÅ©¸³Æ®´Â ±×Àú text ÀÏ »ÓÀÌ´Ù, ¶ó´Â ½ÄÀ¸·Î ´äÀ» Çß¾ú´Âµ¥¿ä, asp.net¿¡¼­ ¸¶Ä¡ OnClick ½Ã¿¡ ¼­¹ö½ºÅ©¸³Æ® ¸Þ¼­µå°¡ ½ÇÇàµÇ´Â ½ÄÀ¸·Î µÇ¾î¼­, Ãʺ¸ÀÚ´Â ´õ ÀÌÇØÇÏ±â ¾î·Æ°Ô µÈ °Í ¾Æ´Ñ°¡ ÇÏ´Â »ý°¢ÀÌ µå³×¿ä.

Form Validation - Æû À¯È¿¼º°Ë»ç

¼­¹ö ÄÁÆ®·Ñ¿¡´Â ¿©·¯°¡Áö°¡ ÀÖ½À´Ï´Ù. ±×Áß¿¡, ±Û¾²±â¶õ¿¡¼­, À¯¿ëÇÏ°Ô ¾²ÀÌ´Â °ÍÀÌ Validator ControlÀ̶ó´Â °ÍÀÔ´Ï´Ù.

      <asp:RequiredFieldValidator 
         id="txtWriterValidator" 
         runat="server"
         ControlToValidate="txtWriter" 
         ErrorMessage="À̸§"
         Display="Static" 
         Text="*" />

RequiredFieldValidator ¶õ, ControlToValidate ¿¡¼­ ÁöÁ¤ÇÑ id¿¡ ÇØ´çÇÏ´Â ÄÁÆ®·Ñ¿¡ °ªÀ» ³Ö¾ú´ÂÁö üũÇÏ´Â ÄÁÆ®·ÑÀÔ´Ï´Ù. ±Û¾²±â¶õ¿¡¼± À̸§, Á¦¸ñ, ºñ¹Ð¹øÈ£°¡ Çʼö »çÇ×À̱⠶§¹®¿¡ ÀÌ ÄÁÆ®·ÑÀ» »ç¿ëÇÏ°Ô µÇÁÒ. ¸¸¾à °ªÀ» ³ÖÁö¾Ê°í ¹öưÀ» ´©¸£¸é Text ¿¡ ÁöÁ¤ÇÑ ³»¿ë(À§¿¡¼­ *)ÀÌ ±× À§Ä¡¿¡ Ãâ·ÂµË´Ï´Ù. ErrorMessage´Â ³ªÁß¿¡ ¼³¸íÇÒ ValidationSummary À§Ä¡¿¡ Ãâ·ÂµÇ°Ô µË´Ï´Ù.

¾î´À Çʵ尡 Çʼö ÀÔ·ÂÇ׸ñÀ϶§, Àü¿£ submit ¹öư Ŭ¸¯½Ã ( º¸Åë form ű×ÀÇ onsubmit À̺¥Æ® ÀÌ¿ë ) ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼­ ÀÔ·ÂÇß´ÂÁö üũÇß¾úÁÒ. ±× üũÇÏ´Â ·çƾÀ» asp.net¿¡¼± ¼­¹öÄÁÆ®·Ñ·Î Á¦°øÇÏ´Â °Ì´Ï´Ù. ¾î´À Çʵ带 Çʼö ÀÔ·ÂÇϵµ·Ï Çϱâ À§Çؼ± À§Ã³·³, ÇÊ¿äÇÑ validator ÄÁÆ®·Ñ(À§¿¡¼­ RequiredFieldValidator ) ¸¦ ¸¸µé¾îµÎ°í, ControlToValidate¿¡ ÇØ´ç ÄÁÆ®·ÑÀÇ id °ªÀ» ³Ö¾îÁÖ¸é ³¡ÀÔ´Ï´Ù. ( asp.net¿¡¼± name ´ë½Å id·Î ÄÁÆ®·ÑÀ» ±¸ºÐÇÕ´Ï´Ù ) ÀÌ ÄÁÆ®·ÑÀº Ŭ¶óÀÌ¾ðÆ® »Ó ¾Æ´Ï¶ó ¼­¹ö¿¡¼­µµ üũÇϱ⠶§¹®¿¡, Àüó·³ ¼­¹ö ½ºÅ©¸³Æ®¿¡µµ °°Àº ³»¿ëÀ» ½áÁÙ Çʿ䰡 ¾ø½À´Ï´Ù. ( html Á÷Á¢ ¸¸µé¾î¼­ submit ÇØµµ ¾ÈµÈ´Ù´Â ¾ê±âÀÔ´Ï´Ù ) ±×¸®°í VS.netÀ» ¾´´Ù¸é ´Ü¼ø Drag-drop¸¸À¸·Îµµ 󸮰¡ µË´Ï´Ù.

      <asp:RegularExpressionValidator 
         id="txtEmailValidator" 
         runat="server"
         ControlToValidate="txtEmail"
         ValidationExpression="^\s*\S+\@\S+\s*$"
         ErrorMessage="¸ÞÀÏÁÖ¼Ò"
         Display="Static" 
         Text="*" />

RegularExpressionValidator´Â Unix¿¡¼­ ÀüÅëÀûÀ¸·Î ¾²¿´´ø, Á¤±Ô½Ä ( Regular Expression ) À» ÀÌ¿ëÇØ¼­, ÄÁÆ®·ÑÀÇ ³»¿ëÀ» Á¦´ë·Î ÀÔ·ÂÇß´ÂÁö üũÇÏ´Â ÄÁÆ®·ÑÀÔ´Ï´Ù. »ç¿ë¹ýÀº RequiredFieldValidator¿Í °ÅÀÇ °°À¸¸ç, ValidationExpression¿¡ ÀÔ·Â ±ÔÄ¢(Á¤±Ô½Ä)À» ÁöÁ¤ÇÏ°Ô µË´Ï´Ù. À§¿¡ ¾²ÀÎ °ÍÀº ¸ÞÀÏÁÖ¼Ò¿ë Á¤±Ô½ÄÀä, ^\s*\S+\@\S+\s*$ ÀÌ ¶æÀ» ¸»·Î ¼³¸íÇϸé,
¹®ÀÚ¿­½ÃÀÛ(^) ÈÄ, °ø¹é(\s)ÀÌ 0°³ÀÌ»ó(*) ³ª¿À°í, °ø¹é¾Æ´Ñ±ÛÀÚ(\S)°¡ 1°³ ÀÌ»ó(+) ³ª¿À°í, @ (\@) ÀÌ ³ª¿À°í, °ø¹é¾Æ´Ñ±ÛÀÚ(\S)°¡ 1°³ÀÌ»ó(+) ³ª¿À°í, °ø¹é±ÛÀÚ(\s)°¡ 0°³ À̻󳪿À°í ³¡³ª´Â($) ¹®ÀÚ¿­
À» ¸»ÇÕ´Ï´Ù. ^^; ±×·¯´Ï±î, xx@xx, xx@xx.com x@x °°Àº °ÍÀº ¸Â°í, xx, xx@, @xx ´Â Ʋ¸®°Ô µË´Ï´Ù. Áß°£¿¡ @±âÈ£¸¸ ÀÖÀ¸¸é Á¤È®ÇÑ ¸ÞÀÏÁÖ¼Ò·Î °£ÁÖÇÏÁÒ. Á¤±Ô½ÄÀº ÀÌó·³, ¹®ÀÚ¿­ÀÌ ¾î¶²½ÄÀ¸·Î ±¸¼ºµÇ´Â°¡, ÇÏ´Â ±ÔÄ¢À» ³ªÅ¸³»´Â ½ÄÀä, ¿©±â¿¡´Â °£´ÜÈ÷ ¾²¿´½À´Ï´Ù¸¸, ´Ù¾çÇÑ ¹æ½ÄÀ¸·Î ÀÀ¿ëÇÒ ¼ö Àֱ⠶§¹®¿¡, °ÅÀÇ ¸ðµç ÇüÅ¿¡ Àû¿ëÇÒ ¼ö ÀÖ´Ù ÇØµµ °ú¾ðÀÌ ¾Æ´Õ´Ï´Ù. ¿¹¸¦µé¾î,

  • ÀüÈ­¹øÈ£ : 0\d{2,3}\-\d{2,4}\-\d{3,4}
  • ÈÞ´ëÆù¹øÈ£ : 01[16789]\-\d{2,4}\-\d{3,4}
  • Áֹεî·Ï¹øÈ£: \d{6}\-\d{7}
  • domain : http\:\/\/[\w\-]+(\.\[\w\-]+)+
ÀÌ·± ½ÄÀ¸·Î, ÀÀ¿ëÇϱ⠳ª¸§ÀÌÁÒ. ¾Æ¸¶µµ RequiredFieldValidator ´ÙÀ½À¸·Î ¸¹ÀÌ ¾²ÀÌ°Ô µÉ Validator ÄÁÆ®·ÑÀÌ ¾Æ´Ò±î ÇÕ´Ï´Ù. Á¤±Ô½ÄÀº ¾à°£ ¾î·ÆÁö¸¸, Àͼ÷ÇØÁö¸é Âü À¯¿ëÇÕ´Ï´Ù. ¿©±â »Ó ¾Æ´Ï¶ó, ¾Õ¿¡ cstUtil ¿¡¼­ Àá½Ã º¸¾ÒÁö¸¸ ¹®ÀÚ¿­ ó¸®ÇÒ¶§µµ ÀÚÁÖ ¾²ÀÌ°Ô µË´Ï´Ù.

* ¸ÞÀÏÁÖ¼Ò´Â Çʼö°¡ ¾Æ´Ï¶ó¼­, RequiredFieldValiator¸¦ ¾²Áö ¾Ê¾Ò½À´Ï´Ù¸¸, ¸¸¾à ¸ÞÀÏÁÖ¼Òµµ Çʼö¶ó¸é, RequiredFieldValidator¸¦ Çϳª ´õ ½áÁÖ¸é µË´Ï´Ù. ¸ðµç Çʼö ÀÔ·Â ÄÁÆ®·Ñ¿¡´Â RequiredFieldValidator¸¦ ½áÁà¾ß ÇÕ´Ï´Ù.

À̿ܿ¡µµ, ¿©±â ´Ù·çÁö ¾Ê¾Ò½À´Ï´Ù¸¸, µÎ °ª ºñ±³ÇÒ¶§ ¾²ÀÌ´Â CompareValidator ´Â ºñ¹Ð¹øÈ£¿Í ºñ¹Ð¹øÈ£ È®ÀÎ °ª ºñ±³ÇÒ¶§ À¯¿ëÇÏ°Ô ¾²À̰í¿ä, RangeValidator ¸¦ ÀÌ¿ëÇØ¼­ °ªÀÌ ÁöÁ¤ÇÑ ¹üÀ§ ³»ÀÎÁö üũÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ, ±×¿Ü ³Ê¹«³ª(?) ƯÀÌÇÑ °ÍÀº CustomValidator·Î Á¤ÀÇÇØ¼­ ÇÒ ¼ö ÀÖ½À´Ï´Ù. CustomValidator´Â ³ªÁß¿¡ ±ÛÁö¿ì±â(delete.aspx)¿¡¼­ ´Ù·ç°Ú½À´Ï´Ù.

  <asp:ValidationSummary
    id="valSummary"
    HeaderText="<font color=darkred>´ÙÀ½À» Á¤È®È÷ ÀÔ·ÂÇØÁÖ¼¼¿ä</font> : "
    DisplayMode="SingleParagraph"
    runat="server"/>

ValidationSummary´Â Validator ÄÁÆ®·Ñ·Î üũÇÑ ³»¿ëÀ» ÇѰ÷¿¡ ¸ñ·ÏÀ¸·Î Ãâ·ÂÇÒ¶§ ¾²ÀÔ´Ï´Ù. ¾Õ¿¡¼­ º¸¾ÒÁö¸¸, <asp:RequiredFieldValidator ... ErrorMessage="¸ÞÀÏÁÖ¼Ò" Text="*" /> ¿©±â¼­ Text¿Í ErrorMessage°¡ ¾²¿´´Âµ¥¿ä, ÀÔ·ÂÇÑ ³»¿ë¿¡ À߸øÀÌ ÀÖÀ»¶§, Text´Â ÄÁÆ®·ÑÀÌ ÀÖ´Â ±× ÀÚ¸®¿¡ ÂïÈ÷°í, ErrorMessage´Â ValidationSummary ÀÚ¸®¿¡ ¸ðµÎ ¸ð¿©¼­(?) Ãâ·ÂµË´Ï´Ù. ShowMessageBox="true" ShowSummary="false" °ªÀ» ÁÖ¸é È­¸é¿¡ Ç¥½ÃÇÏ´Â ´ë½Å ¸Þ½ÃÁö ¹Ú½º·Î Ãâ·ÂÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

Validator ÄÁÆ®·Ñ µéÀº ½áº¸½Ã¸é ¾Æ½Ã°ÚÁö¸¸, ¾ÆÁÖ °£ÆíÇÕ´Ï´Ù. ÀåÁ¡Àº ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÒ Çʿ䰡 ¾ø´Ù, Ŭ¶óÀÌ¾ðÆ® »Ó¾Æ´Ï¶ó ¼­¹ö¿¡¼­µµ üũÇϹǷΠȮ½ÇÇÏ´Ù, VS.NET ¾²¸é Drag-DropÀ¸·Î µÈ´Ù, ºê¶ó¿ìÀú°¡ ¹«¾ùÀÎÁö´Â ½Å°æ ¾È½áµµ µÈ´Ù´Â µîÀÌ µÇ°Ú½À´Ï´Ù.

´Ù¸¸, Á¦ »ý°¢¿¡ ¾à°£ÀÇ ´ÜÁ¡ÀÌ Àִµ¥¿ä, ù¹øÂ°·Î, ³»¿ëÀ» üũÇÏ´Â °ÍÀÌ, IE 5 À̻󿡼­´Â Ŭ¶óÀÌ¾ðÆ®¿¡¼­µµ µÇÁö¸¸, ´Ù¸¥ ºê¶ó¿ìÀú¿¡¼­´Â ¼­¹ö¿¡¼­¸¸ µË´Ï´Ù. Áï, ¹öư Ŭ¸¯ÇÏ¸é ¼­¹ö±îÁö ÀÚ·á°¡ Àü¼ÛµÇ¾ú´Ù°¡, À߸øÀÌ ÀÖÀ¸¸é ´Ù½Ã Ŭ¶óÀÌ¾ðÆ®·Î ÀçÀü¼Û µÇ¾î¾ß ÇÑ´Ù´Â °ÍÀÌÁÒ. ¸ðµ© ¾²´Â NN »ç¿ëÀÚ´Â Á» ±ÍÂúÀ»°Í °°½À´Ï´Ù. ¾îÂ÷ÇÇ javascript ¾µ°Å, NNÀ̳ª IE4¿¡¼­µµ µÇ¾úÀ¸¸é ÁÁ°Ú³×¿ä. ±×¸®°í µÎ¹øÂ°·Î, À̰ÍÀÌ ¸Å¿ì È®À强 ÀÖ±â´Â Çѵ¥, Áֹεî·Ï¹øÈ£ °°Àº ƯÀÌÇÑ °Í ÇÏ·Á´Ï Á» ¾î·Æ´õ±º¿ä. (¾ÕÀÚ¸® µÞÀÚ¸®¸¦ ³ª´©¸é - ±ò²ûÇÑ ¹æ¹ýÀÌ Àß »ý°¢ÀÌ ¾È³³´Ï´Ù ) ½¬¿î ÇÑÆí, ƯÀÌÇÑ °Í ÇÏ·Á´Ï Á» ¾î·Æ´Ù´Â °Ì´Ï´Ù.

* ÀÌ°Í ¾²·Á¸é Ŭ¶óÀÌ¾ðÆ® ½ºÅ©¸³Æ®°¡ À¥»çÀÌÆ®¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. /aspnet_client ¶õ Æú´õ¿¡ ÀúÀåµÇ¾î ÀÖ½À´Ï´Ù. ´å³Ý ±ò¸é ÀÚµ¿À¸·Î ¼³Ä¡µÇÁö¸¸, »õ·Î À¥»çÀÌÆ® ¸¸µé¸é ¼öµ¿À¸·Î ¼³Ä¡ÇØ¾ß ÇÕ´Ï´Ù. ±×·¯·Á¸é cmd »ó¿¡¼­ aspnet_regiis -c ¸¦ ½ÇÇàÇϽðųª, ·çÆ® Æú´õ¿¡ ÀÖ´Â aspnet_client Æú´õ¸¦ ÇØ´ç »çÀÌÆ® ·çÆ®·Î º¹»çÇÏ½Ã¸é µÉ°Ì´Ï´Ù.

* ¿©±â¼­´Â üũ ¾ÈÇÕ´Ï´Ù¸¸, <asp:TextBox TextMode="multiline" > Àΰæ¿ì, Áï html¿¡¼­ <textarea></textarea>·Î Ç¥ÇöµÇ´Â °ÍÀ» RequiredFieldValidatorÀÌ¿ëÇØ¼­ üũÇÏ·ÁÇϸé, üũ°¡ Àß ¾ÈµÉ°Ì´Ï´Ù. ÀÌ°Ç ´å³Ý beta 2ÀÇ ¹ö±×¶ó »ý°¢µÇ´Âµ¥¿ä, ±»ÀÌ ÇÏ¼Å¾ß ÇÒ »óȲÀ̸é, Á¦°æ¿ì /aspnet_client/system_web/1_0_2914_16/WebUIValidation.js ¿¡¼­ ValidatorTrim ÇÔ¼ö¸¦

function ValidatorTrim(s) {
   return s.replace(/(^\s+)|(\s+$)/g,"");
}
ÀÌ·¸°Ô ¹Ù²ã¼­ ÀÓ½Ã·Î ÇØ°áÇØ¼­ ¾²´Ï Âü°íÇϼ¼¿ä.

ÀÌÁ¦ Validator ÄÁÆ®·Ñ·Î üũÇßÀ¸´Ï, ¹öư Ŭ¸¯½Ã ½ÇÇàµÉ Äڵ带 º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

<asp:Button 
     class="cwSubmitBtn" 
     Text="±Û ¾² ±â" 
     OnClick="SubmitBtn_Click" 
     runat="server" />

¿ì¼± asp:Button OnClick¿¡ ½ÇÇàµÉ ÇÔ¼ö À̸§(À§¿¡¼­ SubmitBtn_Click)À» ÁÖ°í, ±× ÇÔ¼ö À̸§À¸·Î Äڵ带 ÀûÀ¸¸é µË´Ï´Ù. ÇÔ¼ö À̸§Àº ¾î¶² °ÍÀÌµç »ó°ü¾ø½À´Ï´Ù.

  void SubmitBtn_Click( Object src, EventArgs e ) {
     if( Page.IsValid ) {
        using( MessageBoard cmb=new MessageBoard("cstBoard") )
        {
            bool r=
            cmb.AddMessage( txtWriter.Text,
                            txtEmail.Text,
                            txtTitle.Text,
                            txtPassword.Text,
                            rdoMode.SelectedIndex,
                            txtContent.Text );
          }
        }
        Response.Redirect("list.aspx");
     }
  }

Validator ÄÁÆ®·ÑÀº ¾Õ¼­ Àá±ñ ¸»Çßµí, Ŭ¶óÀÌ¾ðÆ®¿¡¼­ »Ó ¾Æ´Ï¶ó ¼­¹ö¿¡¼­µµ üũÇÕ´Ï´Ù. ¸¸¾à Ã¼Å©ÇØ¼­ Á¦´ë·Î ÀÔ·ÂÇßÀ¸¸é Page.IsValid °¡ true °ªÀ» °®°Ô µË´Ï´Ù. À§ÀÇ if¹®Àº ±×·¯ÇÑ ÀǹÌÀÔ´Ï´Ù. Ã¼Å©ÇØ¼­ °ªÀÌ Á¤È®ÇÒ ¶§¸¸ (Áï, À̸§,Á¦¸ñ, ºñ¹Ð¹øÈ£ ¸ðµÎ ÀÔ·ÂÇϰí, ¸ÞÀÏÁÖ¼Ò¸¦ ÀÔ·ÂÇÑ °æ¿ì, °ªÀÌ Á¤È®Çß´Ù¸é ) ±ÛÀ» DB¿¡ ÀúÀåÇÏ´Â °ÍÀÌÁÒ.

usingÀº °­ÁÂ4¿¡¼­ Àá½Ã ¼³¸íÇß½À´Ï´Ù¸¸, {} ºí·°À» ºüÁ®³ª°¥¶§ using ¾È¿¡¼­ »ý¼ºÇÑ °³Ã¼ ( À§¿¡¼­ cmb ) ÀÇ Dispose() ¸Þ¼­µå¸¦ ÀÚµ¿À¸·Î È£ÃâÇØÁÝ´Ï´Ù. MessageBoardÀÇ »óÀ§ °³Ã¼ÀÎ DBConnectedObject¿¡ Á¤ÀǵǾî ÀÖµí, À̰æ¿ì¿£ DB ConnectionÀ» Close() ÇÏ°Ô µË´Ï´Ù.

±×¿Ü¿¡´Â ¼­¹öÄÁÆ®·Ñ °ªÀ¸·Î ¾Õ¿¡¼­ Á¤ÀÇÇÑ MessageBoard.AddMessage ¸Þ¼­µå¸¦ È£ÃâÇÏ´Â °Í ¹Û¿¡ ¾ø½À´Ï´Ù. rdoMode.SelectedIndex ´Â, ¼³¸í ¾ÈÇÏ°í ³Ñ¾î°¬½À´Ï´Ù¸¸( ^^; )¼Ò½º¿¡¼­ RadioButtonList °¡ ¾²¿´´Âµ¥¿ä, ±× ÄÁÆ®·ÑÀº ¶óµð¿À¹öưÀ» ±×·ìÁö¾î »ç¿ëÇÒ¶§ ¾²´Âµ¥, ¼Ó¼ºÁß SelectedIndex´Â ¸î¹øÂ°°¡ ¼±ÅõǾú´ÂÁö¸¦ ³ªÅ¸³À´Ï´Ù. javascript¿¡¼­ select ¹Ú½º ¾²´Â °Í°ú ºñ½ÁÇÑ ¹æ½ÄÀÔ´Ï´Ù.
±×¸®°í AddMessage È£Ãâ ÈÄ, Response.Redirect·Î ¾ÕÀ¸·Î ¸¸µé°Ô µÉ list.aspx ·Î À̵¿ÇÕ´Ï´Ù.

¿ì¼±Àº ÀÌ·¸°Ô ¸¸µé¾î ½ÇÇàÇØ¼­, Query Analyser¿¡¼­ È®ÀÎÇßÀ»¶§ Å×ÀÌºí¿¡ °ªÀÌ µé¾î°¡ ÀÖÀ¸¸é ¼º°øÀÔ´Ï´Ù.

ÀÌ write.aspx´Â ¼Ò½º¸¦ ¾à°£ ¹Ù²ã¼­, ±Û ¼öÁ¤¿¡µµ »ç¿ëÇÏ°Ô µË´Ï´Ù. ±× ³»¿ëÀº ´ÙÀ½¿¡ Çϵµ·Ï ÇϰڽÀ´Ï´Ù.

Á¦°¡ ¼³¸íÀ» ÀßÇϰí ÀÖ³ª ¸ð¸£°Ú³×¿ä. ÆäÀÌÁöÀÇ ·ÎÁ÷À» ´Ù½ÃÇѹø ¿ä¾àÇØº¸ÁÒ.

  • <asp:TextBox ... runat="server">, <asp:RadioButtonList ... runat="server"> µîÀÇ ¼­¹öÄÁÆ®·ÑÀ» ÀÌ¿ëÇØ¼­ ³»¿ëÀ» ÀԷ¹޴µ¥,
  • <asp:RequiredFieldValidator ... runat="server">, <asp:RegularExpressionValidator ... runat="server"> µîÀÇ Validator ÄÁÆ®·ÑÀ» ÀÌ¿ëÇØ¼­ ³»¿ëÀ» Á¤È®È÷ ÀÔ·ÂÇß´ÂÁö üũÇÕ´Ï´Ù.
  • ÀÔ·ÂµÈ ³»¿ëÀÌ ¸ðµÎ Á¤È®Çϸé Page.IsValid°¡ true°¡ µË´Ï´Ù.
  • ÀÔ·ÂµÈ ³»¿ëÀÌ Á¤È®ÇÏÁö ¾ÊÀ¸¸é ÇØ´ç Validator ÄÁÆ®·Ñ À§Ä¡¿£ ±× ÄÁÆ®·ÑÀÇ Text°ªÀÌ ³ª¿À°í, <asp:ValidationSummary ... runat="server"> ÄÁÆ®·Ñ À§Ä¡¿¡ ErrorMessage °ªÀÌ ¸ð¿©¼­ Ãâ·ÂµË´Ï´Ù.
  • <asp:Button ... runat="server"> ÀÇ OnClick À̺¥Æ®¸¦ Á¤ÀÇÇØ¼­, ¹öư Ŭ¸¯½Ã, SubmitBtn_ClickÀ̶õ ¸Þ¼­µå¸¦ È£ÃâÇϵµ·ÏÇÕ´Ï´Ù.
  • SumitBtn_Click ÇÔ¼ö¿¡¼± ¿ì¼± ÀÔ·ÂÇÑ ³»¿ëÀÌ Á¤È®ÇÑÁö È®ÀÎÇØ¼­(Page.IsValid°¡ trueÀÎÁö È®ÀÎ) Á¤È®ÇÏ¸é µ¥ÀÌÅ͸¦ ÀúÀåÇÑ ÈÄ ±Û ¸ñ·ÏÆäÀÌÁö(list.aspx) ·Î À̵¿ÇÕ´Ï´Ù.
À̹ø °­Á¿¡¼­ Á¦°¡ Áß¿äÇÏ°Ô »ý°¢ÇÏ´Â ºÎºÐÀº,
  • Äõ¸®¹® ½ÇÇà½Ã Parameter °ª ¼³Á¤Çϱâ
  • ¼­¹öÄÁÆ®·Ñ, ƯÈ÷ Validator ÄÁÆ®·Ñ »ç¿ëÇϱâ
  • asp:ButtonÀÇ OnClickÀ¸·Î À̺¥Æ® Á¤ÀÇÇϱâ
  • Page.IsValid
µîÀÌ µÇ°Ú½À´Ï´Ù.

ÀÌ·¸°Ô ¸¸µé¾î¼­, css¸¦ Àû¿ëÇϸé È­¸éÀÌ ´ÙÀ½°ú °°½À´Ï´Ù. ¾Æ¹« ³»¿ëµµ ÀԷ¾ÈÇϰí "±Û¾²±â" ¹öư Ŭ¸¯ÇÑ È­¸éÀä, À̸§, Á¦¸ñ, ºñ¹Ð¹øÈ£°¡ Çʼö¶ó¼­ ¿·¿¡ »¡°£»ö º°Ç¥(ValidatorÄÁÆ®·ÑÀÇ Text¿¡ ÁöÁ¤ÇÑ ³»¿ë)°¡ Ç¥½ÃµÇ¾î ÀÖ½À´Ï´Ù. ±×¸®°í ValidationSummary À§Ä¡¿¡ ¿¡·¯ ³»¿ë(ValidatorÄÁÆ®·ÑÀÇ ErrorMessage)ÀÌ Á¤¸®µÇ¾î Ãâ·ÂµË´Ï´Ù.

´ÙÀ½¿£ ±Û¸ñ·Ï º¸¿©ÁÖ´Â ºÎºÐ( list.aspx)À» ÇϰڽÀ´Ï´Ù.

 

Back