public static string MD5(string password) {
   byte[] textBytes = System.Text.Encoding.Default.GetBytes(password);
   try {
      System.Security.Cryptography.MD5CryptoServiceProvider cryptHandler;
      cryptHandler = new System.Security.Cryptography.MD5CryptoServiceProvider();
      byte[] hash = cryptHandler.ComputeHash (textBytes);
      string ret = "";
      foreach (byte a in hash) {
         if (a<16)
            ret += "0" + a.ToString ("x");
         else
            ret += a.ToString ("x");
      }
      return ret ;
   }
   catch {
      throw;
   }
}
Posted by 철냄비짱
,

Ajax 사용시 공부부족으로 고생한 UpdatePanel 사용법

<asp:UpdatePanel ID="MainUpdatePanel" runat="server" UpdateMode="Conditional">
  <ContentTemplate>

    <!-- 컨트롤 및 디자인 배치 -->
  </ContentTemplate>

  <Trigger>
    <!-- Trigger 옵션 --> 
  </Trigger>
</asp:UpdatePanel>


UpdateMode : Always(전체 PostBack), Conditional(비동기 CallBack)
프로그래밍부분에서 Update 호출 : MainUpdatePanel.Update(); 실행.
이벤트액션에서 Update 호출 : Button 컨트롤이 UpdatePanel 태그 안에 있어야 부분 Reload 가능.

Posted by 철냄비짱
,

using Excel = Microsoft.Office.Interop.Excel;

 

ExcelSaveDialog.Title = "저장";
            ExcelSaveDialog.CreatePrompt = true;
            ExcelSaveDialog.OverwritePrompt = true;
            ExcelSaveDialog.FileName = dirPath.Substring(0, 4) + "년" + dirPath.Substring(4, 2) + "월" + dirPath.Substring(6, 2) + "일" + dirPath.Substring(8, 2) + "시" + dirPath.Substring(10, 2) + "분수검로그";
            ExcelSaveDialog.DefaultExt = "xls";
            ExcelSaveDialog.Filter = "Excel files(*.xls)|*.xls";
            ExcelSaveDialog.InitialDirectory = "C:\\HRDTMS\\받은자료";
           
            DialogResult result = ExcelSaveDialog.ShowDialog();
            if (result == DialogResult.OK)
            {
                try
                {
                    object missingType = Type.Missing;
                    FileInfo Logtxt = new FileInfo("C:\\HRDTMS\\SET_LOG\\" + CurDate + "_Log.txt");
                    if (Logtxt.Exists)
                    {
                        Excel.Application xls = new Excel.Application();
                        Excel._Workbook wbook = (Excel._Workbook)(xls.Workbooks.Add(Missing.Value));
                        Excel._Worksheet wSheet = (Excel._Worksheet)wbook.ActiveSheet;
                        xls.Visible = false;

                        StreamReader sr = new StreamReader("C:\\HRDTMS\\SET_LOG\\" + CurDate + "_Log.txt", System.Text.Encoding.Default);
                        int i = 0;
                        while (true)
                        {
                            string log = sr.ReadLine();
                            if (log == null)
                            {
                                break;
                            }
                            string[] token = log.Split('|');
                            i++;

                            if (i == 1)
                            {
                                wSheet.Cells[i, 1] = "시간";
                                wSheet.Cells[i, 2] = "PC번호";
                                wSheet.Cells[i, 3] = "비번호";
                                wSheet.Cells[i, 4] = "이름";
                                wSheet.Cells[i, 5] = "사용한연장시간";
                                wSheet.Cells[i, 6] = "로그";
                            }
                            if (log == "")
                            {
                                wSheet.Cells[(i + 1), 1] = "";
                                wSheet.Cells[(i + 1), 2] = "";
                                wSheet.Cells[(i + 1), 3] = "";
                                wSheet.Cells[(i + 1), 4] = "";
                                wSheet.Cells[(i + 1), 5] = "";
                                wSheet.Cells[(i + 1), 6] = "";
                            }
                            else if (log != "" && i != 1)
                            {
                                wSheet.Cells[(i + 1), 1] = token[0];
                                wSheet.Cells[(i + 1), 2] = token[1];
                                wSheet.Cells[(i + 1), 3] = token[2];
                                wSheet.Cells[(i + 1), 4] = token[3];
                                wSheet.Cells[(i + 1), 5] = token[4];
                                wSheet.Cells[(i + 1), 6] = token[5];
                            }
                        }
                        sr.Close();
                        wbook.SaveAs(@ExcelSaveDialog.FileName, Excel.XlFileFormat.xlWorkbookNormal, missingType, missingType, missingType, missingType, Excel.XlSaveAsAccessMode.xlNoChange, missingType, false, missingType, missingType, false);
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(xls);
                        Process[] ExCel = Process.GetProcessesByName("EXCEL");
                        if (ExCel.Count() != 0)
                        {
                            ExCel[0].Kill();
                        }
                    }
                    else
                    {
                        MessageBox.Show("엑셀로 변경할 파일이 없습니다.");
                    }
                }
                catch (Exception)
                {
                    //MessageBox.Show("엑셀 파일로 변경중에 오류가 발생했습니다.");
                    Process[] ExCel = Process.GetProcessesByName("EXCEL");
                    if (ExCel.Count() != 0)
                    {
                        ExCel[0].Kill();
                    }
                }
            }

Posted by 철냄비짱
,

간혹 사용자 정의 컨트롤(.ascx) 파일에서 처리한 내용을 Page에 바로 출력하는 것이 아니라, 문자열로 받아야 할 경우가 있습니다.
ASP.NET 웹 폼의 경우에는 Page.LoadControl() 과 Control.RenderControl() 메서드를 이용하여 아래와 같은 코드로 사용자 정의 컨트롤이 처리한 내용을 문자열로 받아올 수 있습니다.

Control control = LoadControl("~/MailTemplate.ascx");

 

((MailTemplate)control).DestinationName = "Whistle";

 

StringBuilder stringBuilder = new StringBuilder();

using (StringWriter sw = new StringWriter(stringBuilder))

{

    using (HtmlTextWriter tw = new HtmlTextWriter(sw))

    {

        control.RenderControl(tw);

    }

}

 

string messageContent = stringBuilder.ToString();

ASP.NET 웹 폼은 자체가 Page 클래스를 상속받으므로, TemplateControl.LoadControl() 메서드를 사용할 수 있으므로, 사용자 정의 컨트롤을 로드하고 HtmlTextWriter를 이용하여 컨트롤의 실행된 내용을 문자열로 받아 올 수 있습니다.

ASP.NET MVC는 사용자 정의 컨트롤이 ViewUserContol을 상속받게 되며, MVC Controller는 자체적으로 ViewUserControl에 대한 LoadControl을 제공하지 않습니다,
ViewUserControl 클래스의 인스턴스를 생성은 ViewPage 클래스의 인스턴스 상에서만 가능합니다.

즉, MVC에서 사용자 정의 컨트롤이 생성하는 HTML을 문자열로 받기 위해서는, 가상의 ViewPage의 인스턴스를 생성하고, 그 ViewPage를 기반으로 사용자 정의 컨트롤을 생성한 후 ASP.NET 웹 폼에서와 같은 방법으로 문자열을 받아 올 수 있습니다.

ViewData["UserName"] = "Whistle";

 

ViewPage viewPage = new ViewPage() { ViewContext = new ViewContext() };

 

viewPage.ViewData = new ViewDataDictionary(ViewData);

viewPage.Controls.Add(viewPage.LoadControl("~/Views/Shared/MailTemplate.ascx"));

 

StringBuilder sb = new StringBuilder();

using (StringWriter sw = new StringWriter(sb))

{

    using (HtmlTextWriter tw = new HtmlTextWriter(sw))

    {

        viewPage.RenderControl(tw);

    }

}

 

string message = sb.ToString();

위와 같은 형식으로 MVC에서도 사용자 정의 컨트롤의 출력 내용을 문자열로 받아와서 처리가 가능합니다.



출처 : http://blog.ntils.com/50

Posted by 철냄비짱
,

test

Visual Studio/ASP.NET 2010. 12. 5. 01:55
Posted by 철냄비짱
,
protected void ASPxFileUploadComplete(object sender, DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
 {
  string strFilePath = "/";
  string strFileInfo = strFilePath + strFilename;
  
  if (e.UploadedFile.IsValid)
  {
   try
   {
    e.UploadedFile.SaveAs(strFileInfo);
   }
   catch (Exception ex)
   {
    string strErr = ex.Message.ToString();
    throw;
   }
  }
}
Description 이 알기 쉽게 설명되어 있음.
Posted by 철냄비짱
,

string StrConn = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;

ConfigurationManager 이 내장 객체로 접근 가능. 저장된 connection string 불러오기 가능.

Posted by 철냄비짱
,

ASP.NET에서 Page객체 내에 있는 IsPostBack과 IsCallBack의 차이를 명확히 몰랐다. 어떨때 Postback을 써야 할지, 어느 때 Callback을 써야 할지...

이제는 조금은 명확해져서 조심스럽게 포스트하도록 하겠다.

먼저 이 차이를 알려면, HTML을 이용한 서버 데이터 전송에 대해서 살펴보아야 할 것 같다.

예전 HTML로 작성된 데이터들은  정적 페이지라고 했다. 그 이유인 즉, 그 HTML 페이지에는 오로지 HTML 태그와 텍스트들로 나열되서 글과 그림 그리고 링크로 구성된 오로지 정보 전달만을 위한 페이지를 제공해 왔다. 그래서 당시 대부분의 홈페이지들은 텍스트와 이미지와 링크 만 있었고, 그나마 동적으로 움직이는 것을 움직이는 GIF나, 자바스크립트를 겨우 이용하는 정도 였다.  즐비했고, 사용자들은 서버에서 제공되는 값들을 이용만했지 절대 서버에 데이터를 주거나 하지 못했다.

그러다가, 이 HTML에 Form 이라는 것이 생겼다. 이 Form 내에 input 이라는 형태로 데이터들을 넣으면 form 내에 있는 각종 데이터들을 서버에 전달 할 수 있게 되었다. 아마 이 개념이 정립되면서 가입 양식 같은 형태로 만들 수 있었고, 이 가입양식 내에 데이터를 채우면 서버에 필요한 데이터를 전달할 수 있었다. 이 때 Form 안에 보면 action 이라는 속성 값으로 Html URL을 넘기게 되어있는데, 이 URL에 해당하는 서버로 데이터를 전송하게 된다. 이 때 부터 생긴 개념이 ghost 페이지라는 것이 생겼다. 이 ghost 페이지는 오로지 client에서 데이터를 받아 처리하는 로직만 담기고 실제로 사용자에게는 보여지지 않는 페이지였다.

이 개념을 ASP.NET에서 Postback이라는 것으로 만들었다. 즉 예전에는 총 3단계의 과정 [입력폼 페이지] -> [Ghost 페이지] -> [결과 페이지] 로 가졌던 것을 [입력폼 페이지] 하나만으로 그 Form 기능을 수행하게 하는 것이다.

ASP.NET에서 제공하는 System.Web.UI.WebControls 라는 네임 스페이스 안에 다양한 컨트롤들 Button, TextBox... 마치 Windows 클라이언트의 WinForm과 같은 컨트롤들을 생성해서 그 동작을 살펴보면 바로 저 Postback 개념으로 동작하는 것이다. 즉 예전 Form의 Post 방식으로 서버에 데이터를 전송하게 되는데, 단지 특정 Ghost 페이지가 아닌 자기 자신으로 다시 부르는 것이고, 이에 관련된 처리를 ASP.NET에서 자동으로 처리하는 것이다. 그래서 실제 프로그래밍 할 때는 Form 의 action이나, input 과 같은 태그 없이도 자동으로 클릭, 텍스트 변경 등의 이벤트에 대응되는 것이다.

그러나.... 이 방법은 큰 문제가 있으니, 바로 화면 Refresh이다. 이건 원래 Form의 Post 방식을 사용한 것이다 보니 Post가 발동 되는 순간 Form에 정의된 action의 페이지를 부르는 작업을 수행하는 것이다. 그 페이지가 다른 페이지던, 자기 자신이든 결국 그 페이지를 다시 부르는 것과 동일하기 때문에, 화면이 깜박이게 되는 것이다.

이 문제점에 대한 대안으로 callback이라는 것을 제공한다.
AJAX가 세상의 또하나의 트랜드가 되었을 때, 이번엔 HTTPRequest 라는 객체를 이용해 javascript로 데이터를 직접 읽어오는 로직을 ASP.NET으로 구현한 것이 바로 callback이라는 개념이다. 이 동작은 Form을 통해 데이터를 전달하는 것이 아니고 javascript가 독자적으로 httprequest 라는 모듈을 이용해 직접 페이지를 부르는 방법이기 때문에, 화면이 깜빡대지 않는다.


정리를 하자면, Postback은 옛날 개념, Callback은 근좌 유행한 AJAX 기반의 개념이라는 것. 그래서 일반적인 웹 컨트롤은 바로 Postback으로 체크하시면 되고, Callback은 ICallbackEvent 라는 인터페이스를 상속 받은 Page 객체 혹은 컨트롤에서 체크하면 된다.


출처 : http://hind.pe.kr

Posted by 철냄비짱
,


 

개발툴

실장님의 재빠른 소식통으로 인해 오늘 설치하고 실행해본 결과

이뿌다~~~~~!!! 잘났따~~~!! 멋지다!!!!!!!!!

일단 땜빵 형식으로 CSharp으로 이것저것 시도해 봐야겠다.

역시나 난 Hello, World 가 싫다.

대강 로그인 화면 형식으로 Alert 띄워봤다.




설치시 .Net Framework4 와 silverlight4 도 설치가 된다.

윈도우폰 개발시 필수 일지는 모르겠지만, 이런 형태로 원치않는 프로그램 설치는 상당히 안좋아 하기 때문에 이 부분에 대해선 불만이 좀 있다.

Posted by 철냄비짱
,
Posted by 철냄비짱
,