|
<!-- 단일 문장 블록 --> |
다음은 상기의 표현식을 브라우저에서 출력 된 모습입니다.
HTML을 인코딩
앞의 예제와 같이, @ 문자를 사용하여 페이지의 콘텐츠를 표시하는 경우, ASP.NET의 HTML- 인코딩과 출력. 이것은 태그 또는 개별로 해석되는 웹 페이지의 문자로 표시할 수 있도록 예약된 HTML를 대체합니다. HTML을 인코딩없이 서버 코드를 출력한다면 제대로 표시되지 않을 수 있으며 보안 위험에 페이지를 노출시킬 수 있습니다. 자세한 내용은 4장에서 배울것입니다.
2. 중괄호(Brace)로 코드 블록을 둘러싸기
코드 블록은 하나 이상의 코드 구문이 포함되어 있습니다 중괄호로 묶여있다.
<!-- 단일 문장 블록 ---> |
3. 블록 안에, 당신은 세미콜론으로 각 코드 문을 종료
코드 블록 안에, 각각의 전체 코드 문장은 세미콜론으로 끝나야한다. 인라인 표현은 세미콜론으로 끝나야하지 않습니다.
4. 값을 저장하는 변수를 사용
var 키워드를 사용하여 새 변수를 생성, 문자열, 숫자 및 날짜를 포함, 변수에 값을 저장할 수 있습니다. 삽입할 변수는 @을 사용하여 페이지에 직접 값을 저장할 수 있습니다.
<!DOCTYPE html> <html lang="en"> |
*** 변수명에 한글 사용이 가능합니다. 인라인 @구문 출력에서 @과 변수명 사이에 공백이 없어야 합니다. 그리고 인라인 변수명 뒤에 공백없이 특수문자는 올 수 있지만 일반 단어는 공백을 뛰어야 합니다.
5. literal string 값을 쌍따옴표로 감싸기
string은 텍스트로 취급된 문자의 순서입니다. 문자열을 지정하려면 쌍타옴표로 묶으세요:
@{ var myString = "This is a string literal"; } |
(\)문자 또는 ""는 접두어 @ 연산자을 사용하여 리터럴 문자열에서 사용할 수 있습니다. (C#에서, \ 문자는 그대로 문자열 리터럴을 사용하지 않는 한 의미가 특별했다.)
<!-- 따옴표 사용 --> @{ var 나의문자 = "이것은 리터럴 문자열입니다.";} <!-- 문자열에 백슬래쉬 포함 --> @{ var 나의경로 = @"c:\내폴더\";} <P>이 경로는 : @나의경로</P> <!-- 문자열에 쌍쌍따옴표 포함 --> @{ var 나의_인용부호 = @"그 사람이 말했습니다 : ""오늘은 월요일 이다.""";} <p>@나의_인용부호</p> |
6. 코드는 민감합니다.
-------------------------------------------------- ------------------------------
C#에서 키워드(예 var, true, if)와 변수 이름은 대소문자를 구분합니다. 코드의 다음 라인은 두 개의 다른 변수를 만들 수 있습니다.
@{ var lastName = "정"; var LastName = "우화"; } <p>키워드는 대 소문자를 구분합니다 : @lastName, @LastName</p> <p>하지만 변수명은 대 소문자를 구분하지 않습니다.</p> |
변수는 대소문자를 구분하지 않습니다.
7. 대부분의 코딩에 개체를 포함
개체는 page, text box, file, image, web request, email message, 고객 레코드(데이터베이스 행) 등 개체의 특징을 설명하는 속성을 가지고 프로그램 할 수 있는 것을 나타냅니다. 개체 또한 그들이 수행할 수있는 "동사" Method를 가질 수 있습니다. 예제는 파일 개체의 Save Method, 이미지 개체의 Rotate Method, 그리고 이메일 개체의 Send Method를 포함합니다.
이 예제는 Request 개체의 속성에 액세스하는 방법과 서버에서 페이지의 절대 경로를 제공 Request 개체의 MapPath Method를 호출 방법을 보여줍니다 :
<table border="1"> <tr> <td>Url 요청</td> <td>경로 검색</td> <td>전체 경로</td> <td>Http 요청 타입</td> </tr> <tr> <td>@Request.Url</td> <td>@Request.FilePath</td> <td>@Request.MapPath(Request.FilePath)</td> <td>@Request.RequestType</td> </tr> </table> |
8. 결정된 코드를 쓸 수 있습니다.
동적 웹 페이지의 주요 기능은 조건에 따라 무엇을 해야할지 결정할 수있다는 점입니다. 이 작업을 수행하는 가장 일반적인 것은 if 문(선택적 else 문)을 사용하는 것입니다.
@{ <html lang="en"> |
HTTP는 GET과 POST Method 그리고 IsPost 속성 웹 프로그래밍에서는 페이지를 GET에서 또는 POST에서 요청이 시작되는지, 또한 해당 페이지를 처리하는 방법을 알고 있는지 여부가 자주 유용합니다. ASP.NET 웹 페이지에서, 요청은 POST 또는 GET 여부를 확인하기 위해 IsPost 속성을 사용할 수 있습니다. 요청이 POST(게시 물)인 경우, IsPost 속성이 TRUE를 반환하며, 폼의 텍스트 상자의 값을 읽을 수 있습니다. 이 책은 많은 예제는 페이지가 IsPost의 값에 따라 어떻게 다르게 처리되는가를 다룹니다. |
간단한 코드 예제
이 절차에서는 기본적인 프로그래밍 기술을 설명하는 페이지를 만드는 방법을 보여줍니다. 예제에서는 사용자가 이 숫자를 입력할 수있는 페이지를 만든 다음 그들을 표시 결과를 추가합니다.
@{ <html lang="en"> |
페이지를 창으로부터 저장하고 브라우저에서 실행할 수 있습니다. (당신이 그것을 실행하기 전에 페이지가 파일 작업 영역에서 선택되어 있는지 확인합니다.)이 전체 숫자를 입력한 다음 추가 단추를 누릅니다.
9. 기본 프로그래밍 개념
제 1 장에서 본 것처럼 빠르게 동적 웹을 만들 수 있습니다 정교한 기능과 페이지, 그리고 많은 코드를 받지 않습니다.
이 장에서는 ASP.NET 웹 프로그래밍의 개요를 제공합니다. 그것은 철저한 시험, 당신은 가장 자주 사용할 프로그래밍 개념을 통해 빠르게 정리해 나갑니다. 그렇다고하더라도, 그것은 이 학습의 나머지 부분에 대한 필요한 거의 모든 것을 다루고 있습니다.
그러나 첫 번째, 약간의 기술적 배경이 있습니다.
9-1. Razor 구문, 서버 코드 및 ASP.NET
Razor 구문은 웹 페이지에서 서버 기반 코드를 포함하기위한 간단한 프로그래밍 구문입니다. 클라이언트 콘텐츠와 서버 코드: Razor 구문을 사용하는 웹 페이지에서 콘텐츠를 두 가지 종류가 없습니다. 고객 콘텐츠는 웹 페이지에 사용하고있는 것입니다: HTML 마크업 (요소), CSS를 같은 스타일 정보, 자바 스크립트와 같은 클라이언트 스크립트 및 일반 텍스트입니다.
Razor 구문이 클라이언트 콘텐츠 서버에 코드를 추가할 수 있습니다. 페이지에서 서버 코드가있다면 그것은 브라우저가 페이지를 전송하기 전에 서버가 그 코드를 먼저 실행합니다. 서버에서 실행함으로써, 코드는 더 많은 서버 기반 데이터베이스를 액세스하는 것, 혼자 클라이언트 콘텐츠를 사용하여 할 수있는 복잡한 작업을 수행할 수 있습니다. 가장 중요한 것은, 서버 코드가 동적으로 클라이언트의 콘텐츠를 만들 수 있습니다 - 그것은 즉시 HTML 마크업이나 기타 콘텐츠를 생성할 수 있습니다 다음 페이지가 포함되어있을 수있는 정적 HTML과 함께 브라우저로 보낼 수 있습니다. 서버 코드에 의해 생성된의 브라우저의 관점, 고객의 콘텐츠로부터 다른 클라이언트의 콘텐츠와는 다른 것입니다. 당신은 이미 본것처럼, 필수의 서버 코드는 매우 간단합니다.
Razor 구문을 포함하여 ASP.NET 웹 페이지는 특별한 파일 확장자를 (.cshtml. vbhtml) 갖추고 있습니다. 서버는 이러한 확장자을 인식 Razor 구문 표시된의 코드를 실행을 누른 다음 브라우저에 페이지를 보냅니다.
9-2. ASP.NET에서 적합한 곳은?
Razor의 구문은 Microsoft의 NET Framework를 기반으로 ASP.NET이라 블리우는 기술을 기반으로 합니다. NET Framework는 컴퓨터 애플 리케이션의 거의 모든 유형의 개발을위한 Microsoft의 크고, 포괄적인 프로그래밍 프레임 워크입니다. ASP.NET은 구체적으로 웹 응용 프로그램을 만들기위한 디자인. NET Framework의 일부입니다. 개발자는 세계에서 가장 크고 가장 높은 트래픽이 많은 웹사이트를 만들 ASP.NET을 사용하고 있습니다.
Razor 구문은 배우기 쉽고 간편한 구문이지만 ASP.NET에 모든 힘을주었습니다. 당신이 초보자라면 좀더 생산적으로 만들 수 있고, 전문가면 또한 쉽게 구문을 사용할 수 있습니다. 이 구문을 사용하는 간단하더라도, ASP.NET 및. NET Framework위 관계는 웹사이트가 더 복잡 해지더라도, 더 큰 프레임 워크를 사용할 수있다는 것을 의미합니다.
클래스와 인스턴스 응용 프로그램이 실제 고객 정보와 함께 작업해야 할 때, 그것은 고객의 개체 (또는 인스턴스)의 인스턴스를 만듭니다. 각 고객은 고객의 클래스의 별도의 인스턴스입니다. 모든 인스턴스는 각각의 고객의 개체가 고유하기 때문에 동일한 속성과 메서드 이지만, 각 인스턴스에 대한 속성 값은 일반적으로 다른 지원합니다. 한 고객의 개체, 성 속성은 "스미스는"가 될 수도 있고 다른 고객 개체, 성 속성이 "존스."일 수 있습니다. 마찬가지로, 귀하의 사이트에있는 개별 웹 페이지는 페이지 클래스의 인스턴스의 페이지 개체입니다. 페이지에있는 버튼은 버튼 클래스의 인스턴스가 버튼 개체입니다. 각 인스턴스에 있지만, 자체적인 특성을 가지고 그들은 모든 개체의 클래스 정의에 지정된 어떤 기준으로합니다. |
9-3. 언어 및 구문
프로그래밍 언어 규칙입니다 - 여기 Razor의 구문을 사용하여 ASP.NET 서버 코드를 작성의 기초를 배울 수 있습니다.
프로그래밍 경험이 있으면 많은 것을 많은 것을 알고 있을 것입니다. 아마도 .cshtml 파일 전용 서버 코드에 마크업에 추가하는 방법에 익숙해지하셔야합니다.
기본 구문
<p></p>
or <em></em>
:> 같은 HTML 요소의 텍스트 :
@if(IsPost){ // 모든 조화를 이루는 태그와 내용물 사이에, 서버 코드가 뒤따른다. |
추가적인 HTML 요소 및 서버 코드 표현식을 포함할 수 있습니다. ASP.NET에서 브라우저를 여는 HTML 태그를 보게되면, 브라우저에서 (서버 코드 표현을 해결)하는 요소와 그 내용을 포함하여 모든 렌더링합니다.
@if(IsPost){ // 일반 텍스트는 타의 추조을 불허하는(followed by an unmatched)HTML 태그 및 서버코드를 입력하세요. @: 지금 시간은 <br /> @DateTime.Now // 서버코드를 누른다면 일반 텍스트, 태그와 조화, 그리고 보다 더 많은 텍스트 @DateTime.Now @: 그 것은 <em>현재 </em>시간입니다. |
@if(IsPost){ // 예전 예제의 반복이지만, <text> 태그를 상용. <text> 이 시간은 : <br /> @DateTime.Now @DateTime.Now 은 <em>현재</em> 시간입니다. </text> } @{ var minTemp =75; <text> 이것은 그달의 @DateTime.Now.ToString("MMM"), and 그것은 <em> 좋은</ em> 날! <br /><p>asdkfkkkk @minTemp 도</p> </text> } |
첫 번째 예제는 앞의 예제를 반복하지만 <text> 태그 한 쌍으로 텍스트를 둘러싸서 렌더링합니다. 두 번째 예제에서는 세 라인을 포함하고 있는데, 약간 억제되지 않은 텍스트와 조화를 이루지 못하는(br /) 태그의 모두 및 서버 코드와 일치하는 HTML 태그와 함께 합니다. 다시 말하지만, 당신은 또한 어느 쪽의 작업이던지, 개별적으로 각 줄 앞에 @: 연산자를 사용할 수 있습니다.
참고: 당신이 이번 장에서 보여준 것과 같이 Html 요소, <text> 요소, @: 연산자의 텍스트를 출력하려고 할 때, ASP.NET은 HTML 인코딩은 출력을 하지않습니다. (마찬가지로 언급 이전에, 이번 섹션에서 참고되어진 특별한 경우 말고는 ASP.NET은 @에 의한 서버 코드 표현식 및 서버블록 출력을 인코딩합니다.)
공백(WhiteSpace)
문장에서 추가 공간 (및 문자열 리터럴 이외의)운 문장에 영향을주지 않습니다 :
@{ var lastName = "Smith"; } |
문장에서 줄바꿈은 그 문장에 아무런 영향을 미치지 않으며, 쉽게 읽을 수 있도록 문장을 포장하실 수 있습니다. 다음 명령문은 동일합니다 :
@{ var theName = "Smith"; } @{ var personName = "Smith" ; } |
그러나, 문자열 리터럴의 중간에 라인을 줄바꿈할 수 없습니다. 다음 예제는 작동하지 않습니다 :
@{ var test = "This is a long string"; } // 작동하지 않습니다. |
위의 코드처럼 여러 줄의 긴 문자열을 결합하려면 두 가지 옵션이 있습니다. 이 장의 후반부에서 언급하는, 연결 연산자(+)를 사용하는 방법. 또한, 이 장 앞부분에서 본대로 @문자를 사용하여 문자열 리터럴 생성할 수 있습니다. 여러 라인에 걸쳐 그대로 문자열 리터럴을 깰 수 있습니다.
@{ var longString = @"This is a long string"; } |
댓글( "주석")
자신이나 타인에 대한 메모를 남겨봅시다. 그들은 또한 당분간 ( "주석")를 남겨놓지만, 마크업이 실행되기를 원치않는 코드와 마크업을 보이지 않기를 원할 것이다.
Razor 코드와 HTML 마크업에 대해 서로 다른 주석 구문은 없습니다. 페이지가 브라우저에 전송하기 전에 모든 Razor 코드와 마찬가지로, Razor 주석은 서버에(제거) 처리됩니다. 따라서, Razor 주석 구문은 페이지 소스에도 보이지 않지만 파일을 편집할 때 볼 수있는 의견을 넣어 수 있습니다.
ASP.NET Razor 주석은, @ *와 코멘트를 시작하고 * @로 끝납니다. 댓글 한 줄 또는 여러 라인에있을 수 있습니다 :
@* A one-line code comment. *@ @* This is a multiline code comment. It can continue for any number of lines. *@ |
이것은 코드블록 내의 주석입니다.
@{ @* This is a comment. *@ var theVar = 17; } |
이것은 여러줄의 코드 주석입니다.
@{ @* This is a comment. *@ @* var theVar = 17; *@ } |
이 코드 블록 안에, Razor의 주석 구문 대신, C #과 같이 사용하고있는 프로그래밍 언어의 주석 구문을 사용할 수 있습니다 :
@{ // This is a comment. var myVar = 17; /* This is a multi-line comment that uses C# commenting syntax. */ } |
C #에서, 단일 라인 주석은 문자 앞에 / /, 멀티 라인 주석은 / * 및 종료 * /와 함께 시작됩니다. (Razor 주석과 마찬가지로, C# 주석은 브라우저에 렌더링되지 않습니다.)
HTML 주석을 만들 수 있습니다.
<!-- 이것은 주석입니다 --> |
HTML 주석은 <!-- 으로 시작하고 -->으로 끝을 맺습니다. Html 주석은 텍스트를 둘러쌀 뿐만아니라 렌더링을 하지 않으려는 콘텐츠 및 텍스트 모두를 주석 사이에 넣으면 숨길 수 있습니다.
<!-- <p>This is my paragraph.</p> --> |
Razor 주석과는 달리, HTML 주석은 페이지에 표시됩니다. 사용자가 페이지 소스를 확인하여 그들을 볼 수 있습니다.
변수(Variables)
변수는 데이터를 저장하기 위해 사용하는 명명된 개체입니다. 이름은 알파벳 문자로 시작해야하며 공백이나 예약 문자를 포함할 수 없습니다.
변수와 데이터 유형
변수 데이터의 종류는 변수에 저장되어있는 무엇을 나타내는 특정 데이터 유형을 가질 수 있습니다. 문자열 값("안녕하세요" 같은) string 변수를 가질 수 있고, 정수 값을 저장하기 위한(3 또는 679 등) integer 변수 등 많은 다른 데이터 유형을 사용할 수 있습니다.
그러나, 일반적으로 변수에 대한 유형을 지정할 필요가 없습니다. 대부분, ASP.NET은 변수에 데이터가 어떻게 사용되고 있는지에 따라 종류를 알아낼 수 있습니다. (가끔 당신이 유형을 지정해야하며이 사실이 책에서 예제를 확인할 수 있습니다.)
유형의 이름을 사용하여 또는 (당신이 유형을 지정하지 않으려면)의 var 키워드를 사용하여 변수를 선언 :
@ { } |
다음 예제는 웹 페이지에있는 변수의 몇 가지 전형적인 사용을 보여줍니다 :
<!DOCTYPE html> <html lang="en"> |
브라우저에 표시 결과 :
변환과 데이터 형식 테스트
ASP.NET은 일반적으로 자동으로 데이터 형식을 확인할 수 있지만, 가끔은 확인할 수 없습니다. 따라서 명시적 변환을 수행하여 밖으로 ASP.NET 도움이 필요 할 수도 있습니다. 형식을 변환할 수 없다하더라도, 가끔은 어떤 작업의 데이터 타입인지를 보는 테스트는 유용합니다.
가장 흔한 경우는 문자열을 정수 타입이나 날짜 타입 처럼 다른 유형으로 변환할 수 있다는 것입니다. 다음 예제는 숫자 문자열을 변환하는 전형적인 방법을 보여줍니다.
@{ var total = 0; if(IsPost){ // 사용자가 입력한 숫자 검색 var num1 = Request["text1"] var num2 = Request["text2"] // 정수형 숫자로 문자열을 변환하고 추가합니다. total =num1.AsInt() + num2.AsInt(); } } |
규칙에서, 사용자의 입력은 문자열로 옵니다. 사용자가 숫자를 입력하라는 메시지가 있다하더라도, 그들이 숫자를 입력했다 하더라도, 사용자 입력이 제출된 때 코드에서 읽는 것은, 데이터가 문자열 형식으로되어 있습니다. 따라서 숫자로 문자열을 변환해야합니다. ASP.NET은 이 문자열을 추가할 수 없기 때문에 예제에서는, 당신은 그들을 변환하지 않고 산술을 수행하려고하는 경우, 다음과 같은 에러값, 때문에 NET는 2개의 문자열을 추가할 수 없습니다.
Cannot implicitly convert type 'string' to 'int'.
절대적으로 '정수'로 '문자열'을 변환할 수 없습니다.
정수로 값을 변환하려면, 당신은 AsInt 메서드를 호출합니다. 변환이 성공하면, 다음 번호를 추가할 수 있습니다.
다음 표는 변수에 대한 몇 가지 일반적인 전환 및 테스트 방법을 나열합니다.
AsInt() IsInt() AsBool() IsBool() AsFloat() IsFloat() var myStringFloat = "41.432895" var myFloatNum = myStringFloat.AsFloat(); AsDecimal() IsDecimal() AsDateTime() IsDateTime()
방법
설명
예
정수로 변환 ( "593"처럼) 전체 숫자를 나타내는 문자열입니다.
var myIntNumber = 0;
var myStringNum = "539";
if(myStringNum.IsInt()==true){
myIntNumber = myStringNum.AsInt();
}
문자열을 "true"또는 "false"으로 같은 boolean 타입으로 변환.
var myStringBool = "True";
var myVar = myStringBool.AsBool();
"1.3"또는 "7.439"와 같은 십진수 값을 가진 문자열을 부동 소수점 으로 변환.
"1.3"또는 "7.439"와 같은 십진수 값을 가진 문자열을 소수로 변환. (ASP.NET에서 부동소수점(Float)보다 십진법이 정확합니다.
var에 myStringDec = "10317.425";
var에 myDecNum = myStringDec.AsDecimal ();
날짜와 시간 값을 나타내는 문자열을 ASP.NET의 DateTime 타입으로 변환.
var myDateString = "12/27/2010";
var newDate = myDateString.AsDateTime();
ToString()
어느 다른 타입을 문자열로 변환.
int num1 = 17;
int num2 = 76;
// myString 은 1776으로 세팅됩니다.
string myString = num1.ToString() +
num2.ToString();
연산자
연산자는 키워드 또는 ASP.NET에서 표현식의 수행을 위한 어떤 명령의 종류에 대한 문자입니다. C# 언어(그리고 그것에 기반 Razor 구문)는 많은 연산자를 지원하지만 단지 시작하기위한 몇 가지를 인식해야합니다. 다음 표는 가장 일반적인 연산자를 요약한 것입니다.
연산자 | 설명 | 예 |
+ - * / |
수학 연산자는 숫자 표현에 사용. | @(5 + 13) @{ var netWorth = 150000; } @{ var newTotal = netWorth * 2; } @(newTotal / 2) |
= | 할당. 왼쪽에있는 개체에 대한 구문에 오른쪽에있는 값을 할당합니다. | var Name = 17; |
== | 같음.값이 동등하면 True를 반환 합니다. (공지 = 연산자와 == 연산자 사이의 구별.) |
var myNum = 15; if (myNum == 15) { // Do something. } |
!= | 같지 않음. 값이 같지 아니하면 True를 반환 합니다. | var theNum = 13; if (theNum != 15) { // Do something. } |
< > =< =>
|
작다, 크다, 같거나 작다, 같거나 크다. | if (2 < 3) { // Do something. } var currentCount = 12; if(currentCount >= 12) { // Do something. } |
+ | 문자열을 함께 연결하는 데 사용됩니다. ASP.NET은 이 연산자와 표현식의 데이터 유형을 기반으로 덧셈 연산자의 차이를 인식합니다. |
// 표시된 결과는 "abcdef"입니다. @("abc" + "def") |
+= -= |
변수에서 (각각 1) 증가 연산자와 빼기 감소 연산자. |
int theCount = 0; theCount += 1; // 카운트 1를 추가합니다 |
. | 닷. 개체 및 그 속성과 메소드를 구분하는 데 사용됩니다. | var myUrl = Request.Url; var count = Request["Count"].AsInt(); |
() | 괄호(Parentheses). 그룹 표현과 메서드에 매개 변수를 전달하는 데 사용됩니다. | @(3 + 7) @Request.MapPath(Request.FilePath); |
[] | 대괄호(Brackets). 배열 또는 컬렉션에있는 값의 액세스에 사용 | var income = Request["AnnualIncome"]; |
! | Not. 참 값에 대한 반대. 일반적으로 (사실이 아닌 것을)거짓에 대한 빠른 테스트 방법으로 사용. | bool taskCompleted = false; // 처리. if(!taskCompleted) { // 계속 처리 |
&& || |
논리 그리고, 또는. 함께하는 조건 | bool myTaskCompleted = false; int totalCount = 0; // Processing. if(!myTaskCompleted && totalCount < 12) { // Continue processing. } |
코드에서 파일 및 폴더 경로로 작업하기
코드에서 파일 및 폴더 경로에 관한 작업을 자주할 것입니다. 여기서는 개발 컴퓨터에 나타나는 웹사이트에 대한 실제 폴더 구조의 예입니다 :
C:\WebSites\MyWebSite
default.cshtml
datafile.txt
\images
Logo.jpg
\styles
Styles.css
• 물리적 경로 : C : \ 웹사이트 \ MyWebSiteFolder \ 스타일 \ Styles.css
• 가상 경로 (가상 루트 경로에서 /) : / 스타일 / Styles.css
당신은 파일과 폴더에 코드에서 작업할 때, 가끔은 당신이 작업이 어떤 개체에 따라 참조하는 실제 경로와 때로는 가상 경로가 필요합니다. ASP.NET은 코드에서 파일 및 폴더 경로와 협력을위한 당신에게 이러한 도구를 제공 : ~ 연산자, Server.MapPath 메서드 및 href 메서드 입니다.
~(tilde) 연산자 : 가상 루트 얻기
서버 코드에서, 폴더 또는 파일에 가상 루트 경로를 지정 ~ 연산자를 사용합니다. 당신의 코드에서 경로를 한방울 흘리지 않고 다른 폴더 또는 위치에 귀하의 웹사이트를 움직일 수 있기 때문에 유용합니다.
@{ var myImagesFolder = "~/images"; var myStyleSheet = "~/styles/StyleSheet.css"; } |
Server.MapPath 메서드 : 물리적 경로를 가상로 변환
Server.MapPath 메서드는 절대 실제 경로(C#: C:\WebSites\MyWebSiteFolder\default.cshtml)에 대한 가상 경로( / default.cshtml)로 변환합니다. 읽기와 쓰기 텍스트 파일을 웹 서버와 같은 완전한 물리적 경로를 필요로 작업에이 방법을 사용합니다. 당신이 파일이나 메서드에 폴더에 대한 가상 경로를 전달(일반적으로 호스팅하는 사이트의 서버에있는 사이트의 물리적 절대 경로를 모릅니다.) , 그리고 그것은 실제 경로를 반환합니다 :
@{ var dataFilePath = "~/dataFile.txt"; } <!-- 실제 경로를 표시합니다 C:\Websites\MyWebSite\datafile.txt --> <p>@Server.MapPath(dataFilePath)</p> |
Href 메서드 : 사이트 리소스에 대한 경로 만들기
웹페이지 개체의 href가 메서드는 브라우저가 이해하는 경로(~ 연산자를 포함할 수 있음)에 대한 서버 코드를 생성하여 경로를 변환합니다. (브라우저는, ~ 연산자를 이해할 수 없습니다. 그것은 엄격하게 ASP.NET 연산자 때문입니다.) 당신은 이미지 파일, 다른 웹 페이지 및 CSS 파일 같은 리소스에 대한 경로를 만들 때 href 메서드를 사용합니다. 예를 들어, <img>, <link> , 그리고 <a> 요소의 속성에 대한 HTML 마크업 메서드를 사용할 수 있습니다.
@{ var myImagesFolder = "~/images"; var myStyleSheet = "~/styles/StyleSheet.css"; } <!-- 이 코드는 src 속성에서 "../images/Logo.jpg" 경로를 만듭니다. --> <img src="@Href(myImagesFolder)/Logo.jpg" /> <!-- 이 것은 ~를 사용하여 경로를 만든 것으로 동일한 결과를 생성합니다. --> <img src="@Href("~/images")/Logo.jpg" /> <!-- 이 것은CSS file에 대한 경로를 만듭니다. --> <link rel="stylesheet" type="text/css" href="@Href(myStyleSheet)" /> |
조건부 논리 및 루프
ASP.NET 서버 코드는 조건에 따라 작업을 수행하고 특정 기간의 숫자에 반복 코드를 작성할 수 있습니다.(루프를 실행하는 코드입니다)
시험 조건
사용자가 지정한 시험에 반환되는 true 또는 false를 기반으로 if 문을 사용하여 간단한 조건을 테스트하려면 :
@{ var showToday = true; if(showToday) { @DateTime.Today; } } |
if 키워드는 블록이 시작되면. 괄호를 실제 테스트(조건)하고 true 또는 false를 반환합니다. 이 시험은 괄호로 묶어 true 면 블록을 실행합니다. 조건이 거짓인 경우의 if 문은 else 문의 블록을 포함시킬 수 있습니다 :
@{ var showToday = false; if(showToday) { @DateTime.Today; } else { <text>Sorry!</text> } } |
else if 문을 사용하여 다른 여러 조건을 추가할 수 있습니다 :
@{ var theBalance = 4.99; if(theBalance == 0) { <p>You have a zero balance.</p> } else if (theBalance > 0 && theBalance <= 5) { <p>Your balance of $@theBalance is very low.</p> } else { <p>Your balance is: $@theBalance</p> } } |
이 예제에서, 만약 if 블록에서 true인 경우, 첫 번째 조건 실행. 첫 번째 조건이 충족되지 않을 경우 두 번째 조건을 검색, true 일 경우 두 번째 블록을 실행하고 그렇지 않은 경우 다음 조건의 검색으로 넘어가며 마지막 조건은 else로 끝맺습니다.
조건의 많은 건수를 테스트하려면, switch block를 사용 :
<!DOCTYPE html> <html lang="en"> </body> |
테스트 값은(예제에서는 평일 변수) 괄호 안에있습니다. 각 개별 테스트는 콜론(:)으로 끝나는 case 문을 사용합니다. case 문과 테스트 값이 일치하면 블록의 코드가 실행됩니다. break 문으로 각각의 casse 문을 닫습니다. 스위치 블록은 종종 "다른 모든 것들"에 대한 실행 옵션을 마지막으로 케이스로 default 문을 사용하여 어떤 경우에도 속하지 않을 경우 default 문을 실행시킵니다.
브라우저에 표시된 마지막 두 조건부 블록의 결과 :
루핑 코드
자주 반복적으로 동일한 명령문을 실행해야 할 때, 루핑을 사용하여 이 작업을 수행합니다. 예를 들어, 종종 데이터의 컬렉션의 각 항목에 대해 동일한 명령문을 실행합니다. 루프를 원하는 정확히 몇 번인지 안다면, for 루프를 사용할 수 있습니다. 루프의 종류는 특히 카운트 업 또는 카운트 다운에 유용합니다 :
@for(var i = 10; i < 21; i++) { <p>Line #: @i</p> } |
루프가 괄호 안에 3 문장, 세미콜론으로 종료 각 키워드에 대한 다음과 함께 시작됩니다.
중괄호 안쪽 루프의 각 반복에 대해 실행되는 코드입니다. 마크업은 새 단락(<p> 요소)을 루푸를 돌 때마다 생성되고 출력 라인을 추가, i (카운터)에 의해서 표시됩니다. 이 페이지를 실행하면, 예제 항목 번호를 나타내는 각 라인에있는 텍스트와 함께 출력을 표시하는 11 라인을 만듭니다.
컬렉션이나 배열에 관한 일을 할때, 자주 foreach 절을 사용합니다. 컬렉션은 비슷한 개체의 그룹입니다. foreach의 각 항목에 대한 작업을 수행할 수 있습니다. for 루프와는 다르게 컬렉션에 편리하며, 증가 카운터를 하지않거나 한도를 설정할 수 있습니다. 대신 foreach 절 코드는 컬렉션이 끝이 날때 까지 단순히 컬렉션을 통해 진행됩니다.
이 예제는 (웹 서버에 대한 정보를 포함하는 개체입니다) Request.ServerVariables 컬렉션에있는 항목을 반환합니다. 그것은 HTML을 글머리 기호 목록에 새 <li> 요소를 작성하여 각 항목의 이름을 표시합니다 foreach 절을 사용합니다.
<html lang="en"> <head> <meta charset="utf-8" /> <title></title> </head> <body> <ul> @foreach (var myTtem in Request.ServerVariables) { <li>@myTtem</li> } </ul> </body> </html> |
foreach 키워드는 가로안에 첫 번째 단일 항목(var 항목) 변수선언을 한 다음, in 키워드 다음, 루프를 통하여 원하는 컬렉션이 옵니다.
foreach 루프 본문에, 이전에 선언된 변수를 사용하여 현재의 항목에 액세스할 수 있습니다.
보다 일반적인 용도의 루프를 만들려면 while 문을 사용;
<html lang="en"> <head> <meta charset="utf-8" /> <title></title> </head> <body> @{ var countNum = 1001000; while ( countNum < 1002000) { countNum += 1; <p>Line # @countNum</p> <p>Line # @countNum</p> } } </body> </html> |
while 루프는 while로 시작합니다. 괄호 안에 선언된 변수 다음 범위 연산자, 다음에 얼마나 지속할지 반복 크기가 옵니다. 일반적으로 루프는 증가(~에 추가 하기) 또는 감소(~에서 빼기) 변수 또는 계산에 사용되는 개체입니다. 예제에서는 += 연산자는 루프가 실행될 때마다 countNum 1를 추가합니다.
개체와 컬렉션
ASP.NET 웹 사이트에있는 거의 모든 웹 페이지 자체를 포함하는 개체입니다. 이 섹션에 코드에서 자주 작업하는 몇 가지 중요한 개체를 설명합니다.
Page 개체
.NET의 가장 기본적인 개체는 Page 입니다. 어떤 자격 개체 없이 직접 해당 페이지 개체의 속성을 액세스할 수 있습니다. 다음 코드는 페이지의 요청 개체를 사용하여 페이지의 파일 경로를 얻을 수 있는 방법:
@{ var path = Request.FilePath; } |
참조하는 속성과 메소드의 현재 페이지 개체에있어 그것은 확실하게, 당신의 코드에서 페이지의 개체를 대표하는 this 키워드를 사용할 수 있습니다. 이것은 현재 페이지를 표현하기 위하여 this 키워드를 사용하는 이전의 코드 예제입니다.
@{ var path = this.Request.FilePath; } |
위와 같은 정보를 많이 얻을 수있는 페이지 개체의 속성을 사용할 수 있습니다 :
@{ / / 액세스 페이지의 Request 개체 URL을 검색할 수 있습니다. |
Collection 개체(Array와 Dictionaries)
데이터베이스로부터의 사용자 개체 컬렉션 같은 동일한 유형의 개체 그룹입니다. 내장된 Request.Files 컬렉션 같은 ASP.NET에 포함된 많은 컬렉션입니다.
당신은 컬렉션의 데이터와 함께하는 업무를 자주 할것입니다. 두가지 타입의 일반적인 컬렉션 형식은 배열(Array)과 사전(Dictionary)입니다. Array는 각 항목을 보유하는데 별도의 변수를 생성하고 싶지 않고, 유사한 항목의 컬렉션을 저장하기를 원할 때 유용합니다.
@* Array block 1: Declaring a new array using braces. *@ @{ <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert", "Nancy"}; foreach (var person in teamMembers) { <p>@person</p> } } |
배열를 사용하면 문자, 정수 또는 날짜 등 특정 데이터 형식을 선언합니다. 배열을 포함할 수 있는 변수를 표시하기 위해 (String[] 또는 int[] 같은)선언에 []를 추가합니다. 그들의 위치(Index)를 사용하는 배열 또는 foreach 문을 사용하여 항목을 액세스할 수 있습니다. 배열 인덱스는 제로 기반입니다. - 즉, 첫 번째 항목 위치 0에 있고 두 번째 항목 위치는 1에 있습니다.
<!DOCTYPE html> <html lang="en"> |
당신이 그 길이 속성을 갖는 배열의 항목 개수(.Lenth)를 확인할 수 있습니다. (배열을 검색하는) 배열의 특정 항목의 위치를 얻으려면, Array.IndexOf 메서드를 사용합니다. 당신은 또한 같은 것들이 (Array.Reverse 메서드) 배열의 내용을 반대하거나 내용을 (Array.Sort 메서드) 정렬 할 수 있습니다.
브라우저에 표시되는 문자열 배열 코드의 출력 :
Dictionary는 키(또는 이름)을 세팅하거나 검색할 때 사용하는 Key/value 쌍의 컬렉션입니다.
@{ var myScores = new Dictionary<string, int>(); myScores.Add("test1", 71); myScores.Add("test2", 82); myScores.Add("test3", 100); myScores.Add("test4", 59); } <p>My score on test 3 is: @myScores["test3"]%</p> @(myScores["test4"] = 79) <p>My corrected score on test 4 is: @myScores["test4"]%</p> |
새로운 개체를 사전에 작성하는 것을 나타내기 위해 새로운 키워드를 사용합니다. var에 키워드를 사용하여 변수에 사전을 지정할 수 있습니다. (<>) 꺾쇠 괄호를 사용하여 사전에있는 항목의 데이터 형식을 나타냅니다. 사실 이것은 새로운 사전을 생성하는 방식이기 때문에 선언의 마지막에는 괄호 한 쌍()을 추가해야합니다.
사전에 항목을 추가하려면, 변수 사전의 Add 메서드를 호출할 수 있습니다. 그런 다음 키와 값을 지정합니다(이 경우에는 myScores). 양자 택일로, 다음 예제와 같이 대괄호([])를 사용하여 Key를 표시하고 간단한 할당을 사용할 수 있습니다.
myScores["test4"] = 79; |
사전에서 값을 얻으려면 대괄호 안에 키를 지정합니다.
var testScoreThree = myScores["test3"]; |
매개변수와 메소드를 호출
이 장에서 이전에 프로그램과 메서드를 가질 수있는 개체를 읽으면서. 예를 들어, 데이터베이스 개체 메서드를 Database.Connect 할 수도 있습니다. 많은 메서드은 또한 하나 이상의 매개변수가 있습니다. 매개변수는 해당 작업을 수행하는 메서드을 활성화하는 메서드에 념기는 값입니다. 예를 들어, 세 개의 매개변수 소요되는 Request.MapPath 메서드에 대한 선언을 보면 :
public string MapPath(string virtualPath, string baseVirtualDir, bool allowCrossAppMapping); |
이 메서드는 지정된 가상 경로에 해당하는 서버의 실제 경로를 반환합니다. 메서드에 대한 세 개의 매개 변수는 baseVirtualDir, virtualPath과 allowCrossAppMapping 있습니다. 이 메서드를 호출할 때, 세 개의 모든 매개 변수에 대한 값을 제공해야합니다(노트. 선언에서 매개 변수들을 받아 데이터의 데이터 형식으로 나열됩니다.).
위치 매개 변수와 명명된 매개 변수를 : Razor 구문은 메서드에 매개변수를 전달을위한 두 가지 옵션을 제공합니다. 위치 매개변수를 사용하여 메서드를 호출하면 메서드 선언에 지정된의 엄격한 명령의 매개변수를 전달합니다. 당신이 순서를 따라야합니다(메서드에 대한 도큐멘트를 읽는것으로 일반적 순서를 알고있을 것이다.), 당신은 매개변수 중 하나를 건너뛸 수 없습니다 - 값을 갖지 않은 위치 매개변수에 대하여 빈 문자열( "")이나 null을 넘김니다.
다음 예제는 귀하의 웹사이트에서 스크립트라는 이름의 폴더가 있다고 가정합니다. 코드는 Request.MapPath 메서드를 호출하여 올바른 순서로 세 개의 매개변수 값을 전달합니다. 그런 다음 매핑된 결과로 경로를 표시합니다.
// 메서드에 매개변수를 넘기는 것은 위치 매개변수를 사용합니다. var myPathPositional = Request.MapPath("/scripts", "/", true); <p>@myPathPositional</p> |
메서드는 많은 매개변수를 가지고 있을 때, 명명된 매개변수에 위해 보다 더 가독성을 유지할 수 있습니다. 메서드를 호출해서 명명된 매개변수를 사용하여, 명명된 매개변수 다음에 콜론(:)을 넣고 다음에 값을 지정합니다. 몀명된 매개변수의 장점은 당신이 원하는 순서로 그들을 전달할 수 있다는 점입니다.(단점은 메서드 호출로 압축되지 않는 것입니다.)
다음 예제는, 상기와 같은 메서드를 호출하지만 가치를 제공하는 명명된 매개 변수를 사용합니다 :
//명명된 매개변수를 사용하여 메서드에 매개변수를 넘깁니다. var myPathNamed = Request.MapPath(baseVirtualDir: "/", allowCrossAppMapping: true, virtualPath: "/scripts"); <p>@myPathNamed</p> |
보는 것과 같이, 매개 변수가 다른 순서로 전달됩니다. 그러나, 이전 예제와 동일한 값이 실행됩니다.
Handling Errors : 처리 오류
Try - Catch 문
당신은 종종 통제 밖의 이유로 실패할 수있는 코드를 가지고 있습니다. 예를 들면 :
프로그래밍 측면에서, 이러한 상황은 예외라고합니다. 코드가 예외가 발생하면, 그것은 기껏해야 사용자에게 성가신 오류 메시지를 생성(throws)합니다 :
코드 예외가 발생한 상황에서, 이러한 유형의 오류 메시지를 방지하기 위해, Try/Catch 문을 사용할 수 있습니다.
Try 문에서 당신이 체크한 코드를 실행합니다. 하나 이상의 Catch 문에서 발생할 수 있는 구체적인 오류(특정 유형의 예외)를 볼 수 있습니다. 많은 Catch 문은 당신이 기대하는 에러에 대한 보기를 포함할 수 있습니다.
노트 : 그것이 페이지에서 예외가 발생할 수 있기 때문에, Try / Catch 문을 시도해에서 Response.Redirect 메서드를 사용하지 않는 것이 좋습니다. |
다음 예제는 첫 번째 요청에 텍스트 파일을 만든 다음 사용자가 파일을 열 수있는 버튼을 표시하는 페이지를 보여줍니다. 예를 들어 일부러 그것은 예외가 발생할 수 있도록 잘못된 파일 이름을 사용합니다. 이 코드는 두 가지 예외에 대한 Catch 문을 포함 : 파일 이름이 잘못된 경우에 발생합니다 FileNotFoundException을, 그리고 DirectoryNotFoundException, ASP.NET은 심지어 폴더를 찾을 수없는 경우가 발생합니다. (당신이 명령은 모든 것이 제대로 작동 때 실행되는 방식을 볼 수있는 예제에서 성명을 주석을 달 수 있습니다.)
코드가 예외를 처리하지 않은 경우, 당신은 이전 스크린 샷을 같은 오류 페이지가 표시됩니다. 그러나, Try / Catch 섹션은 이러한 유형의 오류보고를 보는 것에서 사용자를 돕습니다.
@{ / / 페이지, 읽기 위해 생성 파일 열기를 시도합니다. |
*** 5일에 걸쳐 겨우 한 장을 읽었습니다. C#에 대한 지식이 많지 않아 힘든 면이 있었고, 영어가 넘 짧아 고생한 측면도 있습니다. 어쨌던 이번 장을 익힘으로 많은 도움이 되었습니다. 혹, 누군가 이 글을 읽어 본다면 해석이 잘 못된 부분을 댓글을 통하여 남겨주면 감사하겠습니다.
|