-
Page_load 및 Page클래스ASP.NET/.NET 프레임워크 2022. 2. 23. 17:29
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %> // Language = "C#" // ASP.NET 언어를 C#으로 설정한다. // AutoEventWireup // ASPX파일에서 발생한 이벤트를 ASPX.CS파일의 이벤트 처리기에 자동으로 연결해준다. // true라면 Page_Load함수를 호출하겠다는 의미 // CodeFile = "*.aspx.cs" // 현재 웹 폼 페이지의 코드를 담당하는 코드 숨김 파일을 지정한다. // Inherits = "클래스명" // 코드 숨김 파일의 클래스 이름을 지정한다. // 참고 // Trace = "true" // 웹 폼을 추적하는 코드를 페이지 아래에 출력한다. // Debug = "true" // 웹 폼 실행 시 발생되는 에러메시지를 자세하게 출력한다. // ValidationRequest = "false" // 웹 폼에서 입력된 HTML태그를 서버 측으로 전송한다. (기본값: true) // MaintainScrollPositionOnPostback = "true" // 상하 스크롤바가 생기는 페이지에서 새로고침하거나 버튼이 클릭될 때 바로 전의 스크롤바 위치로 스크롤 고정한다.// Test.aspx <!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> <title>Test</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Button ID="btnPostBack" runat="server" Text="다시 게시(PostBack)" OnClick="btnPostBack_Click" /> <asp:Button ID="btnNewLoad" runat="server" Text="다시 로드" OnClick="btnNewLoad_Click" /> </div> </form> </body> </html>using System; using System.Web.UI; public partial class Test : BasePage { protected void Page_Load(object sender, EventArgs e) { // 처음 로드(IsPostBack = false)된 상태라면 if(Page.IsPostBack == false) // 다시 게시가 아니라면 { Response.Write("[1] 처음 로드되었습니다<br>"); } // 같은 방법을 다른 코드로 if(!Page.IsPostBack) // 다시 게시가 아니라면 { Response.Write("[2] 처음 로드되었습니다.<br />"); } if(!IsPostBack) // 다시 게시가 아니라면, { Response.Write("[3] 처음 로드되었습니다.<br />"); } // 다시 게시 상태라면 if(Page.IsPostBack == true) { Response.Write("[4] 포스트백(다시 게시) 되었습니다. <br />"); } // 처음 로드 < > 다시 게시 if (!Page.IsPostBack) { Response.Write("[5] 처음 로드되었습니다. <br />"); } else { Response.Write("[6] 포스트백(다시 게시) 되었습니다. <br />"); } // [!] Page_Load() 이벤트 처리기는 처음 로드하거나 // 버튼이 클릭할 때마다 실행 Response.Write("[7] 폼이 로드할 때마다 실행 <br />"); } protected void btnPostBack_Click(object sender, EventArgs e) { // Page.ClientScript.RegisterClientScriptBlock() : 자바스크립트 호출 string strJs = @" <script> alert('포스트백'); </script> "; // Page 클래스로부터 상속 받기 때문에 생략 가능하다. // RegisterClientScriptBlock msdn에서 찾아서 검색하기 Page.ClientScript.RegisterClientScriptBlock( this.GetType(), "msg", strJs); } protected void btnNewLoad_Click(object sender, EventArgs e) { // 현재 페이지로 다시 이동 : 다시 로드 // 한 번 깜빡이고 로드 Response.Redirect(Request.ServerVariables["SCRIPT_NAME"]); } } // object 타입의sender // 이벤트를 발생시킨 자신을 말한다. // EventArgs 타입의 e // 이벤트가 발생할 때 발행자에게 전달한 데이터를 담는다. (데이터 정의 기본 클래스)- 처음 로드 / 다시 게시
- 웹 브라우저 요청 시 처음 실행되는 것 => 처음 로드
- 웹 폼에서 서버 컨트롤의 버튼 등을 클릭했을 때 웹 페이지가 깜빡거리면서 다시 현재 페이지가 실행되는 것 => 다시 게시 (포스트백)
- IsPostBack
- 현재 페이지를 처음 로드했는지, 다시 게시(포스트백)했는지 확인
- Page.IsPostBack
- 웹 폼에 있는 버튼을 클릭하면 클릭 이벤트만 발생하는 것이 아니라 Page_Load이벤트 처리기를 먼저 실행한 후 해당 Button_Click이벤트 처리기가 실행된다.
- 처음 로드할 때만 처리가 필요하다면, Page_Load이벤트 처리기의 if (!Page.IsPostBack) { } 코드 블록 안에 정의를 해주어야 한다.
- 버튼을 클릭했을 때 Page_Load이벤트 처리기를 실행하지 않고 해당 버튼의 고유 기능만 구현하려면, Button 속성에서 CausesValidation속성을 false로 설정한다.
- Button.CausesValidation
- <asp:Button ID="cityQueryButton" Text="Submit" CausesValidation="False" onClick="SubmitButton_Click" runat="server" />
- CausesValidation = false를 사용해서 PostBackUrl 다른 페이지에 다시 게시하는 경우 속성을 false로 설정해야 한다.
- 참고
https://yessong.tistory.com/112
- Page.ClientScript.RegisterClientScriptBlock( )
- 자바스크립트를 동적으로 웹 페이지에 추가
asp.net에서 자바스크립트 사용하기
- Response.Write
Response.Write(@" <script> alert('클릭됨'); </script> ");- Page.ClientScript.RegisterClientScriptBlock( )
Page.ClientScript.RegisterClientScriptBlock(this.GEtType(), "원하는단어", "<script>alert('클릭');<script>");- ClientScript.RegisterStartupScript
ClientScript.RegisterStartupScript(this.GetType(), "원하는단어", "<script>alert('클릭');</script>");- 동적인 OnClick이벤트 등록
this.Button1.Attributes["onclick"] = "alert('동적으로 이벤트 핸들러 등록'); return false;";- HTML코드단에서 처리 ... OnClientClick
// Head <script language="javascript" type="text/javascript"> function Hi() { window.alert("안녕하세요"); } </script> // Body <asp:Button ID="Button" runat="server" Text="Button" OnClientClick="Hi();" />- ScriptManager
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "", "alert("ID를 블럭해제하였습니다."); location.href='View.aspx?" + _strUrl + "'", true); ScriptManager.RegisterStartupScript(this, this.GetType(), "", "alert('에러가 발생했습니다.');", true);ScriptManager
ASP.NET AJAX스크립트 라이브러리 및 스크립트 파일, 부분 페이지 렌더링, 웹 및 애플리케이션 서비스에 대한 클라이언트 프록시 클래스 생성을 관리한다.
object > Control > ScriptManager예제 1 - 부분 페이지 업데이트 사용 (Partial-Page)
컨트롤 내부에 UpdatePanel이 있다.
기본적으로 속성 값 UpdateMode = "Always", ChildrenAsTriggers = "true"
따라서 자식 컨트롤은 비동기 포스트백을 발생시킨다.
예제 2 - 부분 페이지 업데이트 오류 처리 및 스크립트 등록
부분 페이지 업데이트 중에 오류가 발생하면 javascript메시지 상자가 표시된다.
예를 들어, AsyncPostBackError처리기를 제공하고
이벤트 처리기에서 AsyncPostBackErrorMessage 속성을 설정해서 사용자 지정 오류 처리를 사용하는 방법을 보여준다.
<// script <script runat="server"> protecte void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e) { if (e.Exception.Data["ExtraInfo"] != null) { ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message + e.Exception.Data["ExtraInfo"].ToString(); } else { ScriptManager1.AsyncPostBackErrorMessage = "An unspecified error occurred."; } } // body <body> <form id="form1" runat="server"> <div> <asp:ScriptManager ID="ScriptManager1" OnAsyncPostBackError="ScriptManager1_AsyncPostBackError" runat="server"> ... </asp:ScriptManager> </div> </form> </body>ScriptManager ?
ASP.NET Ajax기능의 중심
페이지의 모든 ASP.NET Ajax리소스를 관리- Microsoft Ajax라이브러리 스크립트를 브라우저에 다운로드하고 컨트롤을 사용해서 UpdatePanel사용하도록 설정된 부분 페이지 업데이트를 조정하는 것이 포함된다.
- ScriptManager로 다음을 수행한다.
- 부분 페이지 업데이트와 호환되는 스크립트를 등록한다.
- 릴리스 또는 디버그 스크립트를 브라우저로 보낼지 여부를 지정한다.
- 컨트롤에 웹 서비스를 등록하여 스크립트에서 웹 서비스 메서드에 ScriptManager대한 엑세스를 제공한다.
- Partial-Page 렌더링
- 컨트롤의 EnablePartialRendering (true) 속성이어야 한다.
- 페이지에 UpdatePanel 컨트롤이 하나 이상 있어야 한다.
- 속성은 supportPartialRendering (true)_기본값이어야 한다.
- SupportPartialRendering속성이 명시적으로 설정되지 않은 경우, 해당 값은 브라우저 기능을 기반으로 한다.
- 비동기 포스트백 및 부분 페이지 업데이트를 사용하도록 스크립트를 렌더링한다.
- 업데이트할 페이지의 지역은 UpdatePanel 컨트롤을 사용하여 지정된다.
- ScriptManager컨트롤은 비동기 포스트백을 처리하고 업데이트해야 하는 페이지의 영역만 새로 고친다.
[참고]
https://docs.microsoft.com/ko-kr/dotnet/api/system.web.ui.scriptmanager?view=netframework-4.8
ScriptManager 클래스 (System.Web.UI)
ASP.NET AJAX 스크립트 라이브러리 및 스크립트 파일, 부분 페이지 렌더링, 웹 및 애플리케이션 서비스에 대한 클라이언트 프록시 클래스 생성을 관리합니다.
docs.microsoft.com
[ ASP.NET CORE 책 참고 ]
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %> <!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> <title>Test</title> </head> <body> <form id="form1" runat="server"> <!-- 표준 컨트롤 --> <div> <h1>표준 컨트롤(Standard Control)</h1> <h2>[1] 순수 HTML 사용해서 버튼 만들기</h2> <input type="button" value="버튼1" id="btnInput" /> <h2>[2] runat속성을 추가해서 서버 컨트롤 버튼 만들기</h2> <input type="button" value="버튼2" runat="server" id="btnHtml" /> <h2>[3] ASP.NET 표준 컨트롤을 사용해서 버튼 만들기</h2> <asp:Button Text="버튼3" runat="server" ID="btnServer" /> </div> <hr /> <!-- Redirect --> <div> <asp:Button ID="btnDotNetKorea" runat="server" Text="닷넷코리아" OnClick="btnDotNetKorea_Click" /> <br /> <asp:LinkButton ID="btnDevLec" runat="server" OnClick="btnDevLec_Click">데브렉</asp:LinkButton> <br /> <asp:ImageButton ID="btnVisualAcademy" runat="server" AlternateText="비주얼 아카데미" ToolTip="하와소" OnClick="btnVisualAcademy_Click" Style="height: 16px" /> <br /> </div> <hr /> <!-- TextBox 컨트롤 --> <div> <h2>SingleLine : </h2> 이름 : <asp:TextBox ID="txtSingleLine" runat="server" CssClass="myTextAlign" /> <h2>txtMultiLine : </h2> 소개 : <asp:TextBox ID="txtMultiLine" runat="server" TextMode="MultiLine" /> <br /> <h2>Password</h2> 암호 : <asp:TextBox ID="txtPassword" runat="server" TextMode="Password" /> <hr /> <asp:Button ID="btnOK" runat="server" OnClick="btnOK_Click" Text="확인" /> </div> <!-- Request --> <div> 아이디 : <asp:TextBox ID="UserID" runat="server"></asp:TextBox><br /> 암호 : <asp:TextBox ID="Password" runat="server"></asp:TextBox><br /> 이름 : <asp:TextBox ID="Name" runat="server"></asp:TextBox><br /> 나이 : <asp:TextBox ID="Age" runat="server"></asp:TextBox><br /> <asp:Button ID="btnSubmit" runat="server" Text="전송" OnClick="btnSubmit_Click" /> </div> <hr /> <!-- IP주소 얻기 --> <div> IP주소 얻기 <br /> <asp:Label ID="Label1" runat="server"></asp:Label><br /> <asp:Label ID="Label2" runat="server"></asp:Label><br /> <asp:Label ID="Label3" runat="server"></asp:Label> </div> <hr /> <!-- MapPath --> <div> 현재 파일(웹 폼)의 물리적인 전체 경로 : <asp:Label ID="Label4" runat="server"></asp:Label><br /> 현재 스크립트 파일의 루트 경로 : <asp:Label ID="Label5" runat="server"></asp:Label><br /> </div> </form> </body> </html>'ASP.NET > .NET 프레임워크' 카테고리의 다른 글
Infragistics - Grid 기본 (0) 2022.03.04 List<T> 클래스 (0) 2022.03.02 C# - Linq (0) 2022.02.28 postback, viewstate, runat (0) 2022.02.28 asp.net 관련확장자 (0) 2022.02.28 - 처음 로드 / 다시 게시