AJAX 관련 라이브러리(MicrosoftAjax.js, jQuery.1.3.2.js)

 

 

* AJAX의 특징

           부분 페이지 업데이트(랜더링, 포스트백)

           자동완성기능(AutoComplete)

 

 

 

 

 

* AJAX 라이브러리의 종류

 

 

    - ASP.NET AJAX

 

 

    - 순수 AJAX

               자바스크립트

 

 

    - jQuery AJAX

 

 

    - Prototype.js

 

 

    - 스크립트타큘러스

 

 

    - etc

 

 

 


* Microsoft AJAX적용

 

    - AJAX 확장 컨트롤 사용 : 5개 제공

               UpdatePanel : 부분 페이지 렌더링

   

    - AJAX Control Toolkit 사용 : 30개 이상 제공

               AutoComplete : 자동 완성 기능 제공

 

 


'.NET프로그래밍 > ASP.NET Ajax' 카테고리의 다른 글

Ajax 관련 필기(2)  (0) 2009.10.28
Posted by holland14
:

* 웹 파트(WebParts) 컨트롤

 

 

- 특정영역을 최소화, 최대화하기 드래그해서 위치 이동

- 사용자별로 커스터마이즈 할 수 있음

- 페이지의 상단에 WebPartManager를 떨어 뜨려 놓아야 함

- 실행시켜도 보이는 건 없음

 

 

 

- WebPartZone을 각각 영역에 떨어 뜨려 놓는다.

- 하나의 영역

- 항목을 드래그&드롭, 도킹 할 수 있게 함

 

 

 

영역1에는 캘린더(Calendar) 컨트롤

영역2에는 이미지 컨트롤

영역3에는 로그인 컨트롤

 

각 컨트롤들에 Title 속성을 쓸 수 있음 -> 확장 속성

(-> 각 컨트롤의 제목으로 붙어서 나타남)

 

메뉴파트에 디스플레이 선택 할 수 있는 드롭다운리스트 생성

 

카탈로그존 이용해서 복구 가능

(-> 페이지 카탈로그 파트 컨트롤 사용)

 

[Browse] 모드 : 페이지 보기의 기본 화면, 페이지의 웹 파트를 편집하거나 이동 할 수 없다는 의미. 이 보기 모드는 표준적인 페이지 보기에 사용

 

[Edit] 모드 : 페이지의 특정 웹 파트를 선택해서 편집할 수 있도록 설정. [Edit] 모드는 웹 파트의 제목과 색깔, 심지어 우편번호를 직접 입력해서 날씨 정보를 얻어노는 커스텀 속성 설정 등 모든 유형을 편집할 수 있다.

 

[Design] 모드 : 페이지의 구성 요소에 대한 순서를 다시 정렬. [Design] 모드를 설정하면 하나의 존 내부에 있는 항목을 위아래로 이동하거나, 삭제하거나, 페이지의 다른 존으로 이동할 수 있다.

 

[Catalog] 모드 : 페이지의 모든 웹 파트를 보여준다. 또 페이지의 존에 있는 임의의 항목을 선택할 수 있다.

 

 




[Default.aspx]


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

 

<!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 id="Head1" runat="server">

    <title></title>

</head>

<body>

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

    <div>

        <asp:WebPartManager ID="WebPartManager1" runat="server">

        </asp:WebPartManager>

    <table border="1" width="100%">

        <tr>

            <td colspan="3">메뉴&nbsp;&nbsp;

                <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true"

                    onselectedindexchanged="DropDownList1_SelectedIndexChanged">

                    <asp:ListItem Value="0">Browse</asp:ListItem>

                    <asp:ListItem Value="1">Design</asp:ListItem>

                    <asp:ListItem Value="2">Catalog</asp:ListItem>

                </asp:DropDownList>

            </td>

        </tr>

        <tr>

            <td>영역1<asp:WebPartZone ID="WebPartZone1" runat="server">

                <ZoneTemplate>

                    <asp:Calendar ID="Calendar1" runat="server" Title="달력"></asp:Calendar>

                </ZoneTemplate>

                </asp:WebPartZone>

                <br /><br /></td>

            <td>영역2<br />

                <asp:WebPartZone ID="WebPartZone2" runat="server">

                    <ZoneTemplate>

                        <asp:Image ID="Image1" runat="server" Title="로고"/>

                    </ZoneTemplate>

                </asp:WebPartZone>

                <br /></td>

            <td>영역3<br />

                <asp:WebPartZone ID="WebPartZone3" runat="server">

                    <ZoneTemplate>

                        <asp:Login ID="Login1" runat="server" Title="로그인">

                        </asp:Login>

                    </ZoneTemplate>

                </asp:WebPartZone>

                <br /></td>

        </tr>

    </table>

    </div>

    <asp:CatalogZone ID="CatalogZone1" runat="server">

        <ZoneTemplate>

            <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />

        </ZoneTemplate>

    </asp:CatalogZone>

    </form>

</body>

</html>

 





[Default.aspx.cs]


using System;

using System.Web.UI.WebControls.WebParts;

 

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

 

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)

    {

        if (this.DropDownList1.SelectedValue == "0")

        {

            this.WebPartManager1.DisplayMode = WebPartManager.BrowseDisplayMode;

        }

        else if (this.DropDownList1.SelectedValue == "1")

        {

            this.WebPartManager1.DisplayMode = WebPartManager.DesignDisplayMode;

        }

        else if (this.DropDownList1.SelectedValue == "2")

        {

            this.WebPartManager1.DisplayMode = WebPartManager.CatalogDisplayMode;

        }

    }

}






















Posted by holland14
:

 

팀프로젝트 시 소스 버전 제어(소스 관리)

 

* 기능

- 소스 중앙 관리

- 체크인/체크아웃 정책

           체크아웃 : 소스세이프에서 다운로드받아서 사용중...

                     다른 사용자가 해당 소스 수정 불가

           체크인 : 다 사용된 소스를 소스세이프에 업로드

                     다른 사용자가 해당 소스 접근 가능

 

* 버전 제어 프로그램 종류

- Visual Source Safe 2005

- Vusual Studio Team Foundation Server 2005/2008/2010

 

 

 

 

* Visual Source Safe(VSS) 관리

* 로컬 설치

1. 설치

2. C:\VSS\ 폴더 생성 후 Everyone에 모든 권한

3. C:\VSS\ 폴더를 \\localhost\VSS\\로 공유(Everyone에 모든 권한 부여)

4. Visual Source Safe Database 만들기 : 접속할 수 있는 DB : Portal

           파일 - 새 데이터베이스 - VSS공유폴더지정 - Portal이름으로 DB생성

5. VSS에 접속할 수 있는 계정(vssuser/Pa$$w0rd)

6. VSS 탐색기(클라이언트)를 사용해서 DB열기를 진행하면 앞서 만든 DB에 접근 가능

7. Visual Studio 2008 - 소스제어 변경

           도구 - 옵션 - 소스제어 - 플러그인 - VisualSourceSafe

8. 새 웹 사이트 생성 - 소스제어 추가

9. 체크아웃 후 소스 변경 후 체크인(해야 다른 사용자가 쓸 수 있다.)

 

 

* 원격 설치

 

- 5번까지 진행

 

- Visual Source Safe 탐색기 열기 - Open VSS DB - UNC경로로 접근

 

 

* 소스 제어 옵션

 

- 소스제어 - 환경 - 체크 인된 항목의 동작 : 자동 -> 체크아웃확인

 

 

* 소스 제어 바인딩

- 원격에 있는 소스를 로컬로 가져오기 : Set Working Folder

- 로컬 소스와 원격 소스를 바인딩 : 소스 제어 바인딩

           로컬 : C:\VssWork

           원격 : Portal\WebVss

 

Posted by holland14
:

* 한번만 만들어 두고 리소스 파일만 여러개 만들어 놓으면 다중언어처리가 가능하다.


* 동적으로 문화권 변경 가능


// KOREA : ko-KR

        // USA : en-US

        // 태국 : th-TH

 

        //[0] 동적으로 문화권 변경

        //System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");        

 

        //[1] 현재 언어에 따른 정보 읽어오기

        CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;        

 

        //[2] 문화권 정보 읽어오기

        string s = "";

        s += "문화권 이름 : " + ci.Name + "<br />";

        s += "문화권 표기명 : " + ci.DisplayName + "<br />";

        s += "문화권 영어명 : " + ci.EnglishName + "<br />";

        s += "문화권 본래 이름 : " + ci.NativeName + "<br />";        

 

        //[3] 출력

        Response.Write(s);




 

* 서버 측 문화권 설정

    1. web.config 파일의 <globalization> 요소 단락 정의하기


<!-- 문화권 설정 -->

<globalization culture="en-US" uiCulture="en-US" />

애플리케이션에 적용된 문화권은 미국의 영어이다.


Culture 특성을 사용하면 서버로 들어오는 요청을 처리하는 데 사용하는 문화권을 설정할 수 있다.

uiCulture 특성을 사용하면 애플리케이션의 모든 리소스 파일을 처리하는 데 필요한 기본설정 문화권을 설정할 수 있다.




    2. @Page 지시문으로 페이지 수준에 문화권 설정하기


<%@ Page Language="C#" UICulture="en-US" Culture="en-US" %>

그 문화권 설정을 페이지에 적용한다.



* 클라이언트 측 문화권 설정

 

    브라우저의 인스턴스에서 클라이언트의 선호에 따라 그에 맞는 문화권 설정 가능

    [도구] - [인터넷옵션] - [언어] 버튼

    [추가] 버튼을 눌러서 원하는 문화권 선택, 문화권이 적용되는 순서 지정 가능



 

    1. 사용자가 선택한 문화권에 따라 자동으로 변경하기


<%@ Page Language="C#" culture="auto" uiculture="auto" %>



임의의 구성설정 파일이나 @Page 지시문에서 특정 문화권을 지정하지 않고, 사용자가 페이지를 요청할 때 제공한 문화권을 ASP.NET에서 자동으로 설정.

culture="auto" uiculture="auto"를 삭제하고 global파일에서 en-US로 언어를 지정하면 영어로 웹페이지를 보여준다.

각각의 페이지에 auto속성으로 잡아주면 클라이언트 측(도구-인터넷옵션)을 따라가게 되고 생략하면 web.config 파일의 글로벌라이제이션(globalization)에 정의한 데로 따라간다.





* 지역 리소스 파일 사용하기

 

    페이지 별로 하나씩 만들어 줌.

    해당 페이지를 비주얼 스튜디오에서 열고 비주얼 스튜디오 메뉴에서 [도구] - [로컬 리소스 생성] 선택.

    APP_LocalResources 폴더가 없을 경우 이 폴더를 프로젝트에 생성.

    페이지 지시문에 meta:resourcekey="PageResource1" uiculture="auto" 추가됨.

    ASP.NET 페이지를 기반한 .resx 파일은 App_LocalResouces 폴더에 위치.

    예를 들면 Default.aspx 페이지를 다룬다면 리소스 파일은 Default.aspx.resx로 이름 붙여진다.

    또 다른 언어 리소스 파일 추가하려면 Default.aspx.resx 파일을 복사해서 붙여넣기 한다음, Default.aspx.ru.resx 파일명을 사용한다면 각 서버 컨트롤의 속성 값을 설정해서 러시아어를 사용하는 리소스 파일을 만들 수 있다.

 

 

    - Login.aspx 페이지를 다중 언어로 구현하고 싶을 때...

    기본값은 코드에서 잡아두고 로컬 리소스를 추가해서 값을 변경하면 변경된 값이 웹 브라우저에 보여짐.

    페이지에 메타 특성이 지정되면 리소스 파일의 값을 따라가게 된다.

    리소스 파일을 복사해서 붙여 넣은 다음 이름에 Login.aspx.en.resx 파일명 지정하면 미국 사람이 웹페이지 볼 경우 우선순위가 영어가 높기 때문에 영어로 보여주고 한국인이 웹페이지를 본다면 한국어가 우선순위 높기 때문에 한국어로 웹페이지를 보여주게 된다.





* 전역 리소스 파일 사용하기

 

    여러 페이지에 걸쳐서 사용할 수 있는 전역 리소스 파일 생성.

    여기에 만들어 둔 리소스 키 값은 웹사이트 전체에서 사용 가능.

    프로젝트 우클릭해서 [새 항목 추가]로 리소스 파일을 생성하자.

 

 

- 전역 리소스 파일 가져오는 방법

 

    1. 서버 컨트롤을 선언할 때 값을 직접 조작

 

<asp:Button ID="btnOK2" runat="server" Text="<%$ Resources:Resource, OK %>" />


    
   

    2. 코드 비하인드 페이지에서 설정

    전역 리소스 파일에 설정된 값으로 초기화


btnOK1.Text = Resources.Resource.OK;









Posted by holland14
:


* 지역화(Localization), 전역화(Globalization) : 다중 언어 처리


한번 만들어 두고 다중언어 처리 가능

리소스 파일만 여러개 만들어 놓기

대기업 이상 글로벌 기업 경우 가능

전세계 모든 문화권이 설정되어 있다.

어떤 사이트 만들어 두고 언어권을 구분해 주고 싶을 때

코드 비하인드 페이지에서 동적으로 문화권 변경가능


//[0]
동적으로 문화권 변경

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");




Web.config파일에 지정 가능

<!-- 문화권 설정 -->

<globalization culture="th-TH" uiCulture="th-TH" />




특정 페이지만 문화권 설정 가능


<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" Culture="th-TH" UICulture="th-TH" %>









Posted by holland14
:

 

* SOAP

 

XML 데이터의 전송 규약으로 SOAP(Simple Object Access Protocol)를 채택했다.

SOAP를 사용하면 복잡한 데이터 구조, 이를테면 모든 관계가 포함된 데이터의 테이블인 데이터셋을 외부에 제공할 수 있다.

SOAP은 비교적 단순하면 이해하기 쉽다. XML 웹 서비스는 ASP.NET 처럼 HTTP 상단에서 동작하도록 설계되었다. 그러므로 데이터셋은 동일한 인터넷의 유선(HTTP)으로 전송할 수 있으며 80번 통신 포트가 허용된 방화벽을 무사히 통과할 수 있다.

간단히 말해서 방화벽에 구애받지 않고 통신하고, 플랫폼 독립적인 웹 서비스(Web Service)에서 기본적인 메시지를 전달하는 기본이 되는 프로토콜이다.

 

 

 

 

 

* 로직 구현

 

    - 물리적인 파일이 있어야 함

    [1] 메서드 내에서 직접 구현

    [2] 따로 클래스화 시켜서 호출

    [3] DLL 파일로 만들어서 호출

        GAC DLL 파일 보관 후 호출

==============================================

    - 원격에서 호출

    [4] XML WebService로 만들어서 호출

     .NET Remoting 만들어서 호출

     COM_

     MSMQ

 

 

 

 

 

* XML Web Service

 

    데이터(예를 들면 우편번호)를 각각의 컴퓨터에 넣어두지 않고 한 곳에 넣어두고 호출해서 사용.

    로직 자체를 원격에 두고 사용은 여러군데에서 사용하자 XML 웹 서비스는 전세계 공통 표준 기술.

    닷넷으로만든 것을 웹서비스로 해 두고 다른 진영(예를 들면 자바)에서 가져다 쓸 수 있다.

    예를 들면 날씨, 우편번호, 환율 정보를 한곳에서 가져다 쓴다.

    각각의 클라이언트에는 DB가 없어도 중앙관리를 통해서 이용 가능.

    C#을 모르는 다른 진영에서도 사용 가능.

    JQuery쓸 때도 XML WebService 사용.

    한곳에 로직과 데이터를 보관해두고 분산 시켜 사용.

 

 

 

 

 

* 단계

 

    UI ( 다른 진영에서도 사용 가능)

    XML WebService

    BIZ

    DAC

    데이터 저장소

 

 

 

 

 

* Finding an XML Web Service

 

    1. XML WebService URL 찾기

    2. 구축

    3. 위치시키기

    4. 위스트리스트 찾기

    5. 연결하기

    6. 콜하기

 

 

 

 

 

* DLL 파일 만들기

 

    웹사이트 추가 - 새 프로젝트 - 클래스 라이브러리

    클래스 라이브러리 빌드하면 dll 파일이 생성

    복사해서 붙여 넣기 하거나 참조추가 - 프로젝트 - WebXmlWebServiceDLL선택

 

 

 

 

* 웹 참조 추가

 

    웹서비스 파일 추가 MyWebService.asmx

 




    웹 서비스를 참조추가 : 웹참조 추가



   

    원격이라면 경로를 직접 타이핑




    이 솔루션의 웹서비스 클릭



    MyWebService





* 로직 구현 예제


 

protected void Button1_Click(object sender, EventArgs e)

{

    // 메서드 내에서 직접 구현

    //[1] 2개의 정수를 더해서 그 결과값을 출력

    int a = Convert.ToInt32(TextBox1.Text);

    int b = Convert.ToInt32(TextBox2.Text);

 

    //[2] Process를 직접 코드 내에서 출력

    //int r = a + b; // 코드 내 직접 구현 : 매번 만들어서 사용

    //int r = Sum(a, b); // 메서드화 : 해당 웹 폼내에서 여러번 호출 가능

    //MyMath mm = new MyMath(); // 클래스화 : 한 개 이상의 웹폼에서 메서드 호출 가능

    //int r = mm.Sum(a, b);

    //WebXmlWebServiceDLL.MyMath my = new WebXmlWebServiceDLL.MyMath(); // 컴포넌트 화 : 참조추가

    //int r = my.Sum(a, b);

    localhost.MyWebService mws = new localhost.MyWebService();

    int r = mws.Sum(3, 5); // 웹서비스화 : 원격 호출, 웹 참조 추가

 

    //[3] 결과 출력

    TextBox3.Text = r.ToString();

}

 

/// <summary>

/// 두개의 정수를 더하는 함수(메서드)

/// </summary>

private int Sum(int a, int b)

{

    return (a + b);

}

 



 


 

Posted by holland14
:


1. WebUser

- Web.config - 폼 인증 방식으로 변경
 

<authentication mode="Forms">

        <forms loginUrl="~/User/Login.aspx"></forms>

</authentication>

 

 



2. DB

       Server : (local)\SQLExpress
       Database : WebUser
       Uid : WebUser
       Pwd : Pa$$w0rd
       Web.config : <connectionString />기록
       Table : Users

--[0] Users 테이블생성

Create Table dbo.Users

(

    UID Int Identity(1, 1) Primary Key Not Null,

    UserID VarChar(25) Not Null,

    [Password] VarChar(20) Not Null

    -- 필요한항목이있으면, 언제든추가

)

Go

 

 

--[1] 입력예시문

Insert Into Users Values('admin', '1234')

Go

 

 

--[1] 입력저장프로시저

Create Proc dbo.WriteUsers

    @UserID VarChar(25),

    @Password VarChar(20)

As

    Insert Into Users Values(@UserID, @Password)

Go

Exec WriteUsers '구하라', '1234'

Go

 

 

--[2] 출력저장프로시저

Create Proc dbo.ListUsers

As

    Select * From Users Order By UID Desc

Go

Exec ListUsers

Go

 

 

--[3] 상세저장프로시저

Create Proc dbo.ViewUsers

    @UID Int

As

    Select * From Users Where UID = @UID

Go

Exec ViewUsers 1

Go

 

 

--[4] 수정저장프로시저

Create Proc dbo.ModifyUsers

    @UserID VarChar(25),

    @Password VarChar(20),

    @UID Int

As

    Update Users Set UserID = @UserID, Password = @Password Where UID = @UID

Go

Exec ModifyUsers '하라', '1111', 2

Go

 

 

--[5] 삭제저장프로시저

Create Proc dbo.DeleteUsers

    @UID Int

As

    Delete From Users Where UID = @UID

Go

Exec DeleteUsers 2

 

 

 

--[6] 검색저장프로시저

Create Proc dbo.SearchUsers

    @SearchText VarChar(100)

As

    Declare @SqlQuery VarChar(300)

    Set @SqlQuery = '

                    Select * From Users Where UserID Like ''%' + @SearchText + '%''

                    '

Exec(@SqlQuery)

Go

 

 

 

3. 웹 폼

         Default.aspx : 메인
         Login.aspx : 로그인
         Register.aspx : 회원가입
         UserInfor.aspx : 회원정보보기 및 수정 그리고 탈퇴 등 기능 : 인증된 사용자만 접근 가능
         Welcome.aspx : 로그인 환영 페이지 : 인증된 사용자만 접근 가능
         ~/Admin/Default.aspx : 관리 사용자만 접근 가능




[User/Default.aspx]의 <div>태그 내에 작성한 코드


<h3>메인</h3>

<asp:LoginView ID="LoginView1" runat="server">

    <AnonymousTemplate>

        <asp:LoginStatus ID="LoginStatus1" runat="server" />

        <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/User/Register.aspx">회원가입</asp:HyperLink>

    </AnonymousTemplate>

    <LoggedInTemplate>

        <asp:LoginStatus ID="LoginStatus2" runat="server" />

        <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/User/UserInfor.aspx" >

        <asp:LoginName ID="LoginName1" runat="server" />

        </asp:HyperLink>

    </LoggedInTemplate>

</asp:LoginView>



 


 

-------------------------------------------------------------------------------------


 

[User/Login.aspx]의 <div>태그 내에 작성한 코드 


로그인<br />


아이디 :<asp:Textbox runat="server" ID="txtUserID"></asp:Textbox><br />

암호 :<asp:TextBox runat="server" ID="txtPassword" TextMode="Password"></asp:TextBox><br /><br />

 

<asp:LinkButton Text="로그인" runat="server" ID="btnLogin" onclick="btnLogin_Click"></asp:LinkButton>

 

<asp:requiredfieldvalidator errormessage="아이디를 입력하시오." ControlToValidate="txtUserID" runat="server" Display="None" SetFocusOnError="true"></asp:requiredfieldvalidator>

<asp:RequiredFieldValidator ErrorMessage="암호를 입력하시오." ControlToValidate="txtPassword" runat="server" Display="None" SetFocusOnError="true"></asp:RequiredFieldValidator>

<asp:ValidationSummary runat="server" ShowMessageBox="true" ShowSummary="false" />

 

 






-------------------------------------------------------------------------------------




[User/Login.aspx.cs]에 작성한 코드부분

 

protected void btnLogin_Click(object sender, EventArgs e)

{

    // 아이디와 암호가 맞는 데이터가 있다면

    if (IsCorrectUser(txtUserID.Text, txtPassword.Text))

    {

        //[3] 인증 부여

        FormsAuthentication.RedirectFromLoginPage(txtUserID.Text, false); // 인증가 동시에 팅겨져 나온 페이지로 이동

        //FormsAuthentication.SetAuthCookie(txtUserID.Text, false);   // 인증 쿠키값 부여하고

        //Response.Redirect("Default.aspx"); // 이동

    }

    else

    {

        Page.ClientScript.RegisterStartupScript(this.GetType(), "showMsg", "<script>alert('잘못된 사용자입니다.');</script>");

    }

}


/// <summary>
/// 아이디와 암호가 맞으면 참, 그렇지 않으면 거짓을 반환
/// </summary>

private bool IsCorrectUser(string userId, string password)

{

    bool result = false;

 

    // 커넥션

    SqlConnection con = new SqlConnection();

    con.ConnectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

    con.Open();

 

    // 커멘드

    SqlCommand cmd = new SqlCommand();

    cmd.Connection = con;

    cmd.CommandText = "Select * From Users Where UserID = @UserID And Password = @Password";

    cmd.CommandType = CommandType.Text;

 

    // 파라미터 추가

    cmd.Parameters.AddWithValue("@UserID", txtUserID.Text);

    cmd.Parameters.AddWithValue("@Password", txtPassword.Text);

 

    // 읽어오기

    SqlDataReader dr = cmd.ExecuteReader();

 

    if (dr.Read())

    {

        result = true; // 아이디와 암호가 맞는 데이터가 있구나...

    }

    dr.Close();

    con.Close();

 

    return result;

}

 

 


-------------------------------------------------------------------------------------




[User/Register.aspx]의 <div>태그 내에 작성한 코드


회원가입
<br />

<br />

아이디 :<asp:TextBox ID="txtUserID" runat="server"></asp:TextBox>

<br />

암호 :<asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>

<br />

<br />

<asp:LinkButton ID="btnRegister" runat="server" onclick="btnRegister_Click">회원가입</asp:LinkButton>

 

 






-------------------------------------------------------------------------------------




[User/Register.aspx.cs]에 작성한 코드부분
 

protected void btnRegister_Click(object sender, EventArgs e)

{

    // 커넥션

    SqlConnection con = new SqlConnection();

    con.ConnectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

 

    // 커멘드

    SqlCommand cmd = new SqlCommand();

    cmd.Connection = con;

    cmd.CommandText = "WriteUsers";

    cmd.CommandType = CommandType.StoredProcedure;

 

    // 파라미터 추가

    cmd.Parameters.AddWithValue("@UserID", txtUserID.Text);

    cmd.Parameters.AddWithValue("@Password", txtPassword.Text);

 

    // 실행

    con.Open();

    cmd.ExecuteNonQuery();

    con.Close();

 

    // 메시지 박스 출력 후 기본 페이지로 이동

    string strJs = "<script>alert('가입완료');location.href='Default.aspx';</script>";

    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "goDefault", strJs);

}

 



-------------------------------------------------------------------------------------




[User/UserInfor.aspx]의 <div>태그 내에 작성한 코드 및 [User/UserInfor.aspx.cs]에 작성한 코드부분은 여기서는 없다.(아무런 코드도 작성하지 않았다.)





-------------------------------------------------------------------------------------




[User/Welcome.aspx]에 작성한 소스코드


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

 

<!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>

   

    <asp:Label ID="lblName" runat="server" Text=""></asp:Label>

    반갑습니다.

   

    </div>

    </form>

</body>

</html>

 


-------------------------------------------------------------------------------------




[User/Welcome.aspx.cs]에 작성한 소스코드


using System;

 

public partial class User_Welcome : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        //[1] 인증 여부 확인 : 로그인했으면 참, 그렇지 않으면 거짓을 반환

        if (Page.User.Identity.IsAuthenticated)

        {

            //[2] 인증 이름 출력

            lblName.Text = Page.User.Identity.Name; // web.config에 셋팅했기 때문에 if문 안묶어도 됨

        }

        else

        {

            Response.Redirect("Login.aspx"); // 로그인 페이지로 이동

        }

    }

}

 

 


-------------------------------------------------------------------------------------





[Web.config]에 작성한 소스코드


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

<configuration>

    <appSettings/>

    <connectionStrings/>

    <system.web>

 

    </system.web>

  <location path="UserInfor.aspx">

    <system.web>

      <!-- 허가 -->

      <authorization>

        <!-- 인증되지 않은 사용자(?)를 거부 -->

        <deny users="?"/>

      </authorization>

    </system.web>

  </location>

  <location path="Welcome.aspx">

    <system.web>

      <!-- 허가 -->

      <authorization>

        <!-- 인증되지 않은 사용자(?)를 거부 -->

        <deny users="?"/>

      </authorization>

    </system.web>

  </location>

</configuration>




-------------------------------------------------------------------------------------




[User/Admin/Web.config]에 작성한 소스코드


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

 

<configuration>

    <appSettings/>

    <connectionStrings/>

    <system.web>

      <authorization>

        <!-- Admin 폴더는 박상혁만 접근 가능 -->

        <allow users="박상혁"/>

        <deny users="*"></deny>

      </authorization>

    </system.web>

</configuration>

 



-------------------------------------------------------------------------------------




* 인증 방법 2가지

1.따로따로 파일에 대한 인증
2.폴더 전체에 대한 인증  

폴더 전체에 인증하려면 system.web안에 authrization에 걸고
특정 파일에 인증하려면 location path로 파일 지정
Admin폴더에 특정 사용자만 들어갈 수 있게 하려면
Admin폴더에 새항목 추가 web.config
여기서는 Admin폴더 전체에 대해 인증 걸어야 하기 때문에
system.web안에 authorization에 지정





-------------------------------------------------------------------------------------




4. 주요 명령어

    - 로그인 처리
         System.Web.Security.FormsAuthentication.SetAuthCookie()
         System.Web.Security.FormsAuthentication.RedirectFromLoginPage()
    - 로그인 확인
         Page.User.Identity.IsAuthenticated
    - 로그인 이름
         Page.User.Identity.Name
    - 로그아웃
         FormsAuthentication.Signout()








 

Posted by holland14
:



 ASP.NET 제공 로그인 컨트롤들
 

    Register.aspx : CreateUserWizard 컨트롤
    Login.aspx : 로그인 컨트롤
    Default.aspx :
        LoginView
            LoginStatus
            HyperLink

 

 - Web.config 파일에 가서

<!-- 인증방식 변경 -->

<roleManager enabled="true" />

<authentication mode="Forms"></authentication>

 

- 인증 기능 적용
Admin 폴더를 만들고 관리자만 들어갈 수 있도록..
나만 볼 수 있는 페이지 만들기
Page.User.Identity.Name : 유저 아이디를 담고 있음









웹페이지에  Admin폴더 추가하고 관리자만 볼 수 있는 페이지 삽입
위 그림에서 처럼 ASP.NEt 관리 도구에서 Admin폴더에 접근 가능한 사용자를 정해주면
그 폴더에 대한 web.config파일이 생긴다.



[Admin/Web.config]

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

<configuration>

  <system.web>

    <authorization>

      <!-- 현재 Admin 폴더는 '박상혁'만 허용 -->

      <!-- Administrators 그룹(역할)은 허용 -->

      <allow users="박상혁" roles="Administrators"/>

 

      <!-- 나머지는 거부 -->

      <deny users="*"/>

    </authorization>

  </system.web>

</configuration>


 
* Profile
회원가입  추가 정보 : Profile
 아이디
 암호
 ---
 이름
 주소
 나이

쉽게 추가 정보를 추가 삭제 할 수 있다
주소 정보 저장하고 싶을 때
Web.config파일에 <profile><property><add>로 주소추가

<!-- 프로필 -->

      <profile>

        <properties>

          <add name="Name"/>

          <add name="Age" type="System.Int32"/>

          <add name="Address" type="System.String"/>

        </properties>

      </profile>




[UserInfor.aspx.cs] 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

public partial class UserInfor : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!Page.IsPostBack)

        {

            txtName.Text = Profile.Name; // 이름 출력

        }

    }

    protected void btnAdd_Click(object sender, EventArgs e)

    {

        // 이름 저장

        Profile.Name = txtName.Text;

        Profile.Age = Convert.ToInt32(txtAge.Text);

        Profile.Address = txtAddress.Text;

    }

}

 

ASPNETDB.MDF 파일에 인증/프로필 값 저장이 아닌,
내가 만든 DB에 저장하고 싶다면?
 aspnet_regsql.exe 명령어 사용 : 

2.우리가 직접 Users 테이블 설계... 직접 기능 구현
로그인 + 프로필 : 직접 만들어서 사용하더라..



* LoginView 컨트롤
- AnonymousTemplate : 로그인 하기 전 상태. 인증 전
- LoggedInTemplate : 로그인 후 상태. 인증 후



[Default.aspx]의 <div>태그 내에 작성한 코드

<asp:LoginView ID="LoginView1" runat="server">

        <AnonymousTemplate>

            <asp:LoginStatus ID="LoginStatus1" runat="server" />

            <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Register.aspx">회원가입</asp:HyperLink><br />

            손님으로 접속중입니다.

        </AnonymousTemplate>

        <LoggedInTemplate>

            <asp:LoginStatus ID="LoginStatus2" runat="server" />

            <asp:LoginName ID="LoginName1" runat="server" />

        </LoggedInTemplate>

        </asp:LoginView>

 

 

Posted by holland14
:


* 패널(Panel) 컨트롤

표식을 하기 위해서 구분자 넣기
넣는 이유는 깜빡거리면서 동일한 영역만 실행되게 함
로그인, 로그아웃 패널을 따로 처리
첫번째 패널 visible 사용해서 보였다 안보였다 함
Div 태그 생성됨




[FrmPanelLogin.aspx]의 <div>태그 내에 작성한 코드

 

 

 

<asp:Button ID="btnLogin" runat="server" Text="로그인" onclick="btnLogin_Click" />

<asp:Button ID="btnLogout" runat="server" Text="로그아웃" Visible="false"

            onclick="btnLogout_Click" />

 

<asp:Panel ID="pnlLogin" runat="server">

        손님으로 접속중입니다.

</asp:Panel>

<asp:Panel ID="pnlLogout" runat="server" Visible="false">

        ~님 반갑습니다.

</asp:Panel>

 



-------------------------------------------------------------------------------------




[FrmPanelLogin.aspx.cs]에 작성한 코드부분
 

 

protected void btnLogin_Click(object sender, EventArgs e)

{

    // 로그인 버튼 클릭시 로그아웃 패널 보이기

    btnLogin.Visible = this.pnlLogin.Visible = false;

    btnLogout.Visible = this.pnlLogout.Visible = true;

}

 

protected void btnLogout_Click(object sender, EventArgs e)

{

    // 로그아웃 버튼 클릭시 로그인 패널 보이기

    btnLogin.Visible = this.pnlLogin.Visible = true;

    btnLogout.Visible = this.pnlLogout.Visible = false;

}

 



-------------------------------------------------------------------------------------




[실행결과]






-------------------------------------------------------------------------------------




* 멀티뷰(MultiView) 컨트롤

패널을 개선 더 편하게 함
어떠한 태그도 동반하지 않음
처음에 뜨게하는 패널 선택할 때
기본값 ActiveViewIndex를 지정 (mcp 자격증 출제)
0이 가장 먼저 보임





[FrmMultiViewLogin.aspx]의 <div>태그 내에 작성한 코드

<asp:Button ID="btnLogin" runat="server" Text="로그인" onclick="btnLogin_Click" style="height: 21px" />

<hr />

<asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0">

    <asp:View ID="View1" runat="server">

        손님으로 접속중입니다.

    </asp:View>

    <asp:View ID="View2" runat="server">

        ~님 반갑습니다.

    </asp:View>

</asp:MultiView>

 

  


-------------------------------------------------------------------------------------




[FrmMultiViewLogin.aspx.cs]에 작성한 코드부분

protected void btnLogin_Click(object sender, EventArgs e)

{

    if (btnLogin.Text == "로그인")

    {

        btnLogin.Text = "로그아웃";

        this.MultiView1.ActiveViewIndex = 1; // 로그아웃 패널

    }

    else

    {

        btnLogin.Text = "로그인";

        this.MultiView1.ActiveViewIndex = 0; // 로그인 패널

    }

}

 

 


-------------------------------------------------------------------------------------




[실행결과]






-------------------------------------------------------------------------------------





* 위저드(Wizard) 컨트롤

동일한 영역을 이전 다음 버튼 눌러서 변하게 할 수 있음
위저드 컨트롤은 여러개의 위저드 스탭을 가짐
단계를 여러개로 나눌 수 있음
프로그램 설치하는 것처럼 스텝을 여러개 주고 싶을 때





[FrmWizardRegister.aspx]의 <div>태그 내에 작성한 코드

<asp:Wizard ID="Wizard1" runat="server">

    <WizardSteps>

        <asp:WizardStep ID="WizardStep1" Title="회원가입시작" runat="server" StepType="Start">

            회원가입 페이지입니다.

        </asp:WizardStep>

        <asp:WizardStep ID="WizardStep2" runat="server" Title="아이디"

StepType="Step">

            아이디 :

        </asp:WizardStep>

        <asp:WizardStep ID="WizardStep3" runat="server" Title="암호"

StepType="Auto">

            암호 :

        </asp:WizardStep>

        <asp:WizardStep ID="WizardStep4" runat="server" Title="Step 2"

StepType="Finish">

            회원가입을 완료하시겠습니까?

        </asp:WizardStep>

        <asp:WizardStep ID="WizardStep5" runat="server" Title="Step 2"

StepType="Complete">

            처리되었습니다.

        </asp:WizardStep>

    </WizardSteps>

</asp:Wizard>

 



-------------------------------------------------------------------------------------




[실행결과]










Posted by holland14
:


<DB 입출력 자동>
1.SqlHelper
2.Enterprise Library 4.1 사용
 Connection....  DB 입출력 관련 코딩 안해도 됨




SqlHelper 클래스 - Microsoft Application Blocks for .NET  

-
http://msdn.microsoft.com/ko-kr/library/ms954827.aspx




Enterprise Library(Enterprise Library 4.1)

-
http://msdn.microsoft.com/en-us/library/dd203099.aspx

Posted by holland14
: