특정 한글 문자열을 db등에 저장을 할때, 

Server.UrlEncode를 사용하여 인코딩 한다.

하지만 인코딩 한 사이트는 UTF-8 기반으로 되어있는 사이트이고

그 값을 불러오는 사이트는 EUC-KR 기반으로 되어있는 사이트라면

Server.UrlDecode로 인코딩한 값을 불러와도 한글이 깨져버리는 현상이 있다.

그럴때, HttpUtility.UrlDecode("인코딩할 문자열",System.Text.Encoding.UTF8);

이 걸 사용하면 깨지지 않는 한글 문자열을 볼 수가 있다.
저작자 표시 비영리 변경 금지

  보통 DropDownList Control의 ViewSate값을 false로 설정을 하고, 버튼컨트롤의 클릭이벤트와 같은 포스트백 이벤트나, PageLoad에서 DropDownList의 선택된 값을 가져오려고 한다면, 원하는 결과를 얻을 수가 없다. 그 이유는 페이지의 Load 이벤트에서 OnLoad 이벤트를 호출하게 되는데, OnLoad이벤트가 하는 일중의 하나는 뷰상태가 복원이 되는 것이다. OnLoad에 대한 자세한 설명은(http://msdn.microsoft.com/ko-kr/library/system.web.ui.control.onload.aspx)이곳에 가면은 자세히 알 수가 있다.
  그럼 어디서 값을 가져와야 할것인가가 문제이다. 저는 여기서 이 문제를 해결하기 위해서, Init이벤트에서 선택된 값을 가져와서 변수에 저장을 하였습니다. PreInit의 경우 컨트롤을 초기화 해주기 전이므로 DropDownList컨트롤이 null 상태이다. 그럼 간단히 소스를 보면,
selectedSeries, selectedGrade, selectedType 의 경우는 전역변수로 선언을 했으며, 페이지가 맨 처음 불러 왔을때는, 선택된 값을 불러올 필요가 없으므로 포스트백인경우만 선택된값을 가져오게 하였다.
ddlSeries, ddlGrade, ddlType는 DropDownList의 각각의 ID값이다. UniqueID는 각 DropDownList가 html 코드로 바뀌게 되면서 id값과 name 값이 바뀌게 되는데, ClientID는 id값, UniqueID는 name값이라 생각하면은 될듯하다.
  간단하게 ViewState 을 이용하지 않고 DropDownList의 선택된 값을 가져오는 방법을 알아봤다!! 누구나가 다 아는 내용인가요??
저작자 표시 비영리 변경 금지



웹 페이지는 Stateless 상태이다. 서버가 클라이언트의 브라우져에게 응답을 하여 페이지를 보내주면 브라우져는 이에 응답하여 페이지를 보여주게 되고, 이후 페이지의 상태변화에 따른값은 저장하지 않는다. 그래서 일반적으로 PostBack일어나면 기존의 저장되어있는 상태값들은 유지가 되지 않는다.

하지만 상태값을 유지해야 할 필요성이 있는 컨트롤들이 많다. 이런것을 위해서 ASP.NET의 경우 ViewState라는 것을 지원하고, 기본적으로 클라이언트측 상태관리 옵션은 Hidden Field, Cookie, Query String가 있다.

  ViewState같은 경우 ASP.NET에서 자동으로 관리를 해준다. 그래서 사용을 할때 그냥 아무런 생각없이 사용하면은 된다. 자동적으로 다 해주니까... 하지만 이건 문제가 상당히 많다.. ViewState를 사용한 소스를 보면 Hidden Field의 값을 보면 상당히 길다.. 그리고 모든 서버 컨트롤의 ViewState를 사용하는 기본 옵션인 EnableViewState값은 true이다. 그래서 내가 생각하고 있지 않지만 Hidden Field값으로 상태유지되는 컨트롤들이 상당히 있다.
  이렇게 많이 사용되는 값들은 매번 PostBack마다 서버에 전송되게 되고, 이러한 상황이 되면 웹페이지가 느리게 된다. 간혹 ViewState에 대한 설명을 보면 HiddenField보다 보안이 강화되었다는 말을 들을 수가 있다. Hidden Field보다 보안이 강화된것은 사실이지만, Base64로 인코딩 되어있다는 사실은 이미 알려져 있고, 간단하게 디코딩만 하면은 ViewState값은 알 수가 있다.
  그래서 나는 쓸데 없이 길기만 하고, 미미한 보안기능을 사용할 바에는 조금이나마 길이가 짧고 서버에게 전송하는 양이 적은 Hidden Field나 Query String을 사용하는게 낫지 않을까 하는게 나의 생각이다.

오랜만에 포스트지만 오래 글을 못쓰겠다.
다음 포스트에서는 프로그램도 만들어 봐야겠다.

저작자 표시 비영리 변경 금지
ASP.NET의 웹서비스를 만들고, 이 설명 페이지를 웹에서 노출시키지 않기위해서는
아래처럼 Web.config파일을 수정하면 된다.
<system.web>
  <webServices>
   <protocols>
    <remove name="Documentation" />
   </protocols>
  </webServices>
   ....
</system.web>

저작자 표시 비영리 변경 금지
ASP.NET의 AJAX의 기능중의 하나인 Update Panel과 최근의 Chart컨트롤인 경우 .NET 3.5 기반으로 만들어져 있다. 하지만 Visual Studio 2005의 경우 .NET 3.0기반의 개발툴이다. 그래서 이 컨트롤을 사용하기 위해서는 일반적으로 web.config 파일에 관련 정보를 입력을 하고 사용을 해야 사용이 가능하다.

<system.web> 태그 안에  밑의 관련된 정보를 입력만 하면 사용이 가능하다.
<pages>
      <controls>
        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting" assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </controls>
    </pages>
    <httpHandlers>
      <add path="ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
      <add path="ChartImg.axd" verb="GET,HEAD" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
    </httpHandlers>
    <httpModules>
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpModules>
저작자 표시 비영리 변경 금지
  • Postback
      사용자가 웹 페이지에서 입력한 정보나변경한 정보는 서버로 다시 전송되며, ASP.NET은 전송된 정보를 기초로 하여 ASP.NET은 전송된 정보를 기초로 하여 ASP.NET페이지를 서버에서 처리한 후 그 결과를 사용자에게 다시 되돌려 줍니다. 이렇게 자신을 타겟으로하여 현재 페이지를 다시 서버로 전송하는 프로세스를 Postback입니다.
      그럼 사용자가 페이지를 처음 요청하는 것은 Postback일까요? 정답은 No! 입니다. 즉, 페이지가 처음 로드된 것은 Postback이 아닙니다. 페이지가 처음 로드된 후 Postback을 일으키는 컨트롤을 통해 현재 페이지를 다시 서버로 전송할 때가 Postback이 일어나는 시점입니다.
      Postback인지 아닌지는 Page.IsPostback 을 사용하시면 됩니다. Postback 일경우 True를 아닐경우 False를 리턴합니다.
  • Cross-Page Posting
      Cross-Page Posting이란 타겟을 다른 대상 페이지로 하여 현재 페이지를 서버로 전송하는 프로세스 입니다. 밑의 예제는 정보를 보내는 페이지(Default.aspx)와 정보를 받아서 그 정보를 보여주는 페이지(CrossPagePosting.aspx)로 구성되어 있습니다.
    Default.aspx 의 Body 부분
    <form id="form1" runat="server">
        <div>
             <asp:TextBox ID="TextBox1" runat="server" />
             <asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="~/CrossPagePosting.aspx" />
        </div>
    </form>

    CrossPagePosting.aspx.cs파일
         protected void Page_Load(object sender, EventArgs e)
         {
                if (PreviousPage != null)

                {

                    TextBox t;

                    t = (TextBox)PreviousPage.FindControl("TextBox1");

                    Response.Write("Cross-Page Posting : " + t.Text);

                }

                else

                {

                    Response.Write("Cross-Page Posting fail");

                }

            }


저작자 표시 비영리 변경 금지
  1. 뛰어난 성능
      ASP.NET으로 구현된 웹 페이지는 최초 요청 시에 한번만 컴파일 작업을 하고 이 컴파일된 결과를 Assembly Cache라는 곳에 저장을해 둡니다. 그러면, 최초 요청이 일어난 후부터는 사용자로부터 웹 페이지 요청이 있더라고 컴파일 작업 없이 Assembly Cache에 있는 내용을 가지고 바로 사용자에게 응답을 해 줄 수 있다.
  2. 강력한 개발 도구 제공
      책의 내용을 보면 ASP.NET도 메모장과 같은 도구로 개발은 가능하다고 합니다. 하지만 누가 ASP.NET을 메모장으로 개발을 할까요?? 좋은 도구가 있으면 그것을 활용하는 것이 옳은 선택입니다.
  3. 유연성
      .NET 언어들은 서로간의 문법은 다르지만내부적인 규격은 모두 동일하여 C#으로 만든 기능을 VB.NET이나 J#과 같은 다른 .NET 언어에서 참조가 가능 합니다.
  4. 개발의 단순성
      기본적으로 ASP.NET에서제공하는 서버 컨트롤이 있습니다. 간단히 드래그 앤 드랍으로 컨트롤 추가가 가능합니다.
  5. 사이트 관리의 용이성
      전체 웹사이트를 관리를 하는 Machine.config 와 Web.config 만 수정을 하면 웹사이트의 모든 설정을 변경이 가능합니다.
  6. 뛰어난 확장성
      서버컨트롤의 기본 기능만을 사용하는것이 아닌 자신이 원하는 기능과 스타일을 추가하여 사용이 가능 합니다.
  7. 철저한 보안기능
      ASP.NET의 보안 매커니즘은 인증과 권한부여라는 두 부분으로 나누어져 있다고 하네요. 그런데 아직 이부분은 공부를 해보지 못하여 뭐라고 쓰지를 못하겠습니다


 

이상 ASP.NET의 장점들을 적어봤습니다.

저작자 표시 비영리 변경 금지