-
3월 16일 유효성 검사 연습카테고리 없음 2020. 3. 16. 14:10반응형
aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="CRUD.WebForm1" EnableEventValidation="false" %> <!--/ 페이지 지시문 --> <!DOCTYPE html> <!-- 스크립트가 있다면 내부 로직을 처리하는 부분임 --> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style type="text/css"> * { padding: 0; margin: 0; } .header_name { margin: 10px; width: 60px; text-align: right; font-size: 12px; font-weight: 600; } .test_textbox { width: 120px; height: 20px; margin: 2px; font-size: 1px; position: relative; top: 2px; border-radius: 4px; } .test_dropDownList { width: 120px; height: 20px; margin: 2px; font-size: 13px; position: relative; top: 2px; border-radius: 4px; } #buttons { position: relative; left: 322px; } .centered { position: relative; left: 50%; transform: translateX(-50%); } .btn_op { height: 25px; } </style> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script> </head> <body> <form id="form1" runat="server"> <%--스크립트매니저--%> <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True"> </asp:ScriptManager> <div class="container"> <label class="header_name">사번</label> <asp:TextBox CssClass="test_textbox" ID="사번" runat="server" ReadOnly="true"></asp:TextBox> <div class="row"> <div class="col-4"> <label class="header_name">성명</label> <asp:TextBox CssClass="test_textbox" ID="성명" runat="server"></asp:TextBox> <asp:RegularExpressionValidator ID="체크_성명" runat="server" ControlToValidate="성명" ErrorMessage="성명을 정확히 입력해야합니다." ValidationExpression="^[기-힣]{1,4}$" Font-Size="10px" ValidationGroup="jumin"></asp:RegularExpressionValidator> </div> <div class="col-4"> <label class="header_name">주민번호</label> <asp:TextBox CssClass="test_textbox" ID="주민번호앞" runat="server" Style="width: 45px;" /> <label>-</label> <asp:TextBox CssClass="test_textbox" ID="주민번호뒤" runat="server" Style="width: 55px;" /> <asp:RegularExpressionValidator ID="체크_주민_앞" runat="server" ControlToValidate="주민번호앞" ErrorMessage="주민등록번호 앞자리 입력 오류" ValidationExpression="^[0-9]{6}$" Font-Size="10px" ValidationGroup="jumin"></asp:RegularExpressionValidator> <asp:RegularExpressionValidator ID="체크_주민_뒤" runat="server" ControlToValidate="주민번호뒤" ErrorMessage="주민등록번호 뒷자리 입력 오류" ValidationExpression="^[0-9]{7}$" Font-Size="10px" ValidationGroup="jumin"></asp:RegularExpressionValidator> <asp:ValidationSummary ID="validationSummary" runat="server" ValidationGroup="jumin" /> </div> </div> <div class="row"> <div class="col-4"> <label class="header_name">이메일 </label> <asp:TextBox CssClass="test_textbox" ID="이메일" runat="server"></asp:TextBox> <asp:RegularExpressionValidator ID="체크_이메일" runat="server" ControlToValidate="이메일" ErrorMessage="올바른 이메일 형식이 아닙니다." ValidationExpression="^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$" Font-Size="10px"></asp:RegularExpressionValidator> </div> <div class="col-4"> <label class="header_name">전화번호 </label> <asp:TextBox CssClass="test_textbox" ID="전화번호" runat="server"></asp:TextBox> <asp:RegularExpressionValidator ID="체크_전화번호" runat="server" ControlToValidate="전화번호" ErrorMessage="올바른 전화번호 형식이 아닙니다." ValidationExpression="^[0-9]+$" Font-Size="10px"></asp:RegularExpressionValidator> </div> </div> <div class="row"> <div class="col-8"> <label class="header_name">주소</label> <asp:TextBox CssClass="test_textbox" ID="우편번호" runat="server"></asp:TextBox> <asp:RegularExpressionValidator ID="우편번호_체크" runat="server" ControlToValidate="우편번호" ErrorMessage="우편번호 형식 오류" ValidationExpression="^[0-9]{5,6}$" Font-Size="10px" ValidationGroup="jumin"></asp:RegularExpressionValidator> <asp:TextBox CssClass="test_textbox" Style="margin-left: 10px; width: 238px;" ID="주소" runat="server"></asp:TextBox> </div> </div> <div class="row"> <div class="col-4"> <label class="header_name">부서 </label> <asp:DropDownList CssClass="test_dropDownList" ID="부서" runat="server"> <asp:ListItem Text="--선택--" Value="none" /> <asp:ListItem Text="경영관리부" Value="경영관리부" /> <asp:ListItem Text="개발1팀" Value="개발1팀" /> <asp:ListItem Text="개발2팀" Value="개발2팀" /> <asp:ListItem Text="개발3팀" Value="개발3팀" /> <asp:ListItem Text="개발4팀" Value="개발4팀" /> <asp:ListItem Text="디자인팀" Value="디자인팀" /> <asp:ListItem Text="영업팀" Value="영업팀" /> <asp:ListItem Text="유지보수팀" Value="유지보수팀" /> </asp:DropDownList> <%-- <asp:RequiredFieldValidator ID="체크_부서" Text="<br/>부서 입력 오류" InitialValue="none" ControlToValidate="부서" runat="server" Font-Size="10px" />--%> </div> <div class="col-4"> <label class="header_name">직위 </label> <asp:DropDownList CssClass="test_dropDownList" ID="직위" runat="server"> <asp:ListItem Text="--선택--" Value="none" /> <asp:ListItem Text="대표이사" Value="대표이사" /> <asp:ListItem Text="상무" Value="상무" /> <asp:ListItem Text="이사" Value="이사" /> <asp:ListItem Text="부장" Value="부장" /> <asp:ListItem Text="차장" Value="차장" /> <asp:ListItem Text="과장" Value="과장" /> <asp:ListItem Text="대리" Value="대리" /> <asp:ListItem Text="사원" Value="사원" /> <asp:ListItem Text="인턴" Value="인턴" /> </asp:DropDownList> <%-- <asp:RequiredFieldValidator ID="체크_직위" Text="<br/>직위 입력 오류" InitialValue="none" ControlToValidate="부서" runat="server" Font-Size="10px" />--%> </div> </div> </div> <div id="buttons" class="container"> <asp:Button ID="버튼_테스트" class="btn btn-primary btn_op" runat="server" Text="테스트" OnClientClick="ScriptManagerTest()" Style="padding: 2px; width: 50px; font-size: 13px;"></asp:Button> <asp:Button class="btn btn-primary btn_op" runat="server" Text="신규" OnClick="버튼_신규" Style="padding: 2px; width: 50px; font-size: 13px;"></asp:Button> <asp:Button class="btn btn-success btn_op" runat="server" Text="저장" OnClick="버튼_저장" Style="padding: 2px; width: 50px; font-size: 13px;"></asp:Button> <asp:Button class="btn btn-danger btn_op" runat="server" Text="삭제" OnClick="버튼_삭제" Style="padding: 2px; width: 50px; font-size: 13px;"></asp:Button> </div> <script type="text/javascript"> function ScriptManagerTest() { alert(PageMethods.HelloWorld()); }; </script> <%--그리드뷰--%> <div class="container pt-3 my-3"> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" Width="484px" CellPadding="4" ForeColor="#333333" GridLines="None" Height="190px" OnRowCommand="GridView1_RowCommand"> <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> <Columns> <%--<asp:BoundField DataField="사번" HeaderText="사번" InsertVisible="False" ReadOnly="True" SortExpression="사번" ItemStyle-Width="50"> <ItemStyle Width="50px"></ItemStyle> </asp:BoundField>--%> <asp:TemplateField HeaderText="사번" ValidateRequestMode="Disabled"> <ItemTemplate> <asp:LinkButton runat="server" CommandName="ITEM" CommandArgument='<%# Eval("사번") %>'><%# Eval("사번") %></asp:LinkButton> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="성명" HeaderText="성명" SortExpression="성명" /> <asp:BoundField DataField="주민번호" HeaderText="주민번호" SortExpression="주민번호" /> <asp:BoundField DataField="부서" HeaderText="부서" SortExpression="부서" /> <asp:BoundField DataField="직위" HeaderText="직위" SortExpression="직위" /> </Columns> <EditRowStyle BackColor="#999999" /> <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> <SortedAscendingCellStyle BackColor="#E9E7E2" /> <SortedAscendingHeaderStyle BackColor="#506C8C" /> <SortedDescendingCellStyle BackColor="#FFFDF8" /> <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TEST_LJHConnectionString %>" SelectCommand="SELECT [사번], [성명], [주민번호], [부서], [직위] FROM [회원관리]"></asp:SqlDataSource> </div> <%--그리드뷰--%> </form> <script type="text/javascript"> $(document).ready(function () { $('#<%= 버튼_테스트.ClientID %>').on('click', function () { }); }); </script> </body> </html>
aspx.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Data.SqlTypes; using System.Data; using System.Web.Services; //웹 폼 작성시 주로 사용되는 기본적인 네임스페이스 -> 웹 폼 생성 시 자동으로 선언됨 namespace CRUD { public partial class WebForm1 : System.Web.UI.Page //파일이름의 클래스로 선언됨 { //전역변수 시작 ------------------------------------------------------ //DB 연결 주소 string source = @"Server=192.168.10.155;" + "uid=test_idino;" + "pwd=idino@12;" + "database=TEST_LJH"; string 선택된사번; string 주민번호; String sql; //----------------------------------------------------------전역변수 끝 protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { } } //데이터 출력하기 - SELECT protected void 버튼_출력(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(source); sql = "SELECT * FROM 회원관리"; try { // DB연결 conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); // 커서기능? 데이터를 읽기위한 리더 생성 SqlDataReader reader = cmd.ExecuteReader(); //데이터 출력이 정상적으로 되는지 테스트하기 위한 테이블 생성 Response.Write("<Table border=1>"); //데이터 읽기 -> 테이블에 데이터 입력 while (reader.Read()) { Response.Write("<tr>"); for (int i = 0; i < reader.FieldCount; i++) { Response.Write("<td>" + reader[i] + "</td>"); } Response.Write("</tr>"); } Response.Write("</table>"); reader.Close(); } catch (Exception exception) { Console.WriteLine(exception); } finally { //DB 연결 해제 conn.Close(); GridView1.DataBind(); } }//End Of Method : Output_Test // 값 초기화 protected void 버튼_신규(object sender, EventArgs e) { 사번.Text = ""; 성명.Text = ""; 주민번호앞.Text = ""; 주민번호뒤.Text = ""; 이메일.Text = ""; 전화번호.Text = ""; 우편번호.Text = ""; 주소.Text = ""; 부서.SelectedIndex = 0; 직위.SelectedIndex = 0; }//End Of Method : Insert_Test //데이터 입력 및 수정 (INSERT,UPDATE) protected void 버튼_저장(object sender, EventArgs e) { if (Page.IsValid == true) { bool _주민_체크 = false; bool _주민_체크_앞 = false; bool _주민_체크_뒤 = false; bool _직위_체크 = false; bool _부서_체크 = false; bool _성명_체크 = false; //성명체크 if (성명.Text != "") { _성명_체크 = true; } else { Response.Write("성명 공백 <br/>"); } if (주민번호앞.Text == "") { Response.Write("주민등록 앞번호 공백 <br/>"); } else { _주민_체크_앞 = true; }//주민등록번호 앞자리 체크 if (주민번호뒤.Text == "") { Response.Write("주민등록 뒷번호 공백 <br/>"); } else { _주민_체크_뒤 = true; }//주민등록번호 뒷자리 체크 if(_주민_체크_앞 == true && _주민_체크_뒤 == true) { _주민_체크 = true; }//주민등록번호 앞자리와 뒷자리가 공백이 아닐 때 _주민_체크 값 true //직위체크 if(직위.SelectedValue != "none") { _직위_체크 = true; }else { Response.Write("직위 선택 안됨 <br/>"); } //부서체크 if (부서.SelectedValue != "none") { _부서_체크 = true; }else { Response.Write("부서 선택 안됨 <br/>"); } if (_성명_체크 && _주민_체크 && _직위_체크 && _부서_체크 ) { SqlConnection conn = new SqlConnection(source); if (사번.Text == null || 사번.Text == "") { sql = "INSERT INTO 회원관리 " + "(성명" + ",주민번호" + ",성별" + ",이메일" + ",전화번호" + ",우편번호" + ",주소" + ",부서" + ",직위) " + "VALUES " + "(@성명" + ",@주민번호" + ",@성별" + ",@이메일" + ",@전화번호" + ",@우편번호" + ",@주소" + ",@부서" + ",@직위)"; } else { sql = "UPDATE 회원관리 " + "SET 성명 = @성명 " + ",주민번호 = @주민번호 " + ",성별 = @성별 " + ",이메일 = @이메일 " + ",우편번호 = @우편번호 " + ",전화번호 = @전화번호 " + ",주소 = @주소 " + ",부서 = @부서 " + ",직위 = @직위 " + "WHERE 사번 = @사번"; } SqlCommand cmd = new SqlCommand(sql, conn); cmd.Parameters.AddWithValue("@성명", 성명.Text); cmd.Parameters.AddWithValue("@주민번호", 주민번호앞.Text + 주민번호뒤.Text); if (주민번호뒤.Text != "") { cmd.Parameters.AddWithValue("@성별", 주민번호뒤.Text.Substring(0, 1)); } cmd.Parameters.AddWithValue("@이메일", 이메일.Text); cmd.Parameters.AddWithValue("@우편번호", 우편번호.Text); cmd.Parameters.AddWithValue("@전화번호", 전화번호.Text); cmd.Parameters.AddWithValue("@주소", 주소.Text); cmd.Parameters.AddWithValue("@부서", 부서.Text); cmd.Parameters.AddWithValue("@직위", 직위.Text); if (사번.Text != null || 사번.Text != "") { cmd.Parameters.AddWithValue("@사번", 사번.Text); } try { conn.Open(); cmd.ExecuteNonQuery(); } catch (Exception exception) { System.Diagnostics.Trace.WriteLine(exception); } finally { //DB 연결 해제 conn.Close(); GridView1.DataBind(); } } } }//End Of Method : Update_Test //사번으로 데이터 삭제하기 - DELETE protected void 버튼_삭제(object sender, EventArgs e) { //사번을 기준으로 데이터를 삭제하므로 사번값이 null 이라면 실행 할 필요없음. if (사번.Text != null) { //Connetion 객체 생성 for DB 연결 SqlConnection conn = new SqlConnection(source); // DB와 통신이 이루어지므로 try문 사용 try { // DB에 요청할 쿼리 - 사번으로 데이터 삭제 String sql = "DELETE " + "FROM 회원관리 " + "WHERE 사번 = @사번"; SqlCommand cmd = new SqlCommand(sql, conn); cmd.Parameters.AddWithValue("@사번", 사번.Text); // DB연결, 쿼리수행 conn.Open(); cmd.ExecuteNonQuery(); } catch (Exception exception) { System.Diagnostics.Trace.WriteLine(exception); } finally { conn.Close(); GridView1.DataBind(); } } }//End Of Method : Delete_Test //그리드뷰 로우 셋팅 //그리드뷰를 선택 가능하도록 설정?? //protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) //{ // if (e.Row.RowType == DataControlRowType.DataRow) // { // e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(GridView1, "Select$" + e.Row.RowIndex); // e.Row.Attributes["style"] = "cursor:pointer"; // } //} //End Of Method : GridView1_RowDataBound //그리드뷰 이벤트 //그리드뷰에서 선택된 로우값의 변화를 감지한 뒤 명령을 실행한다. protected void 링크_테스트(object sender, EventArgs e) { //Connetion 객체 생성 for DB 연결 SqlConnection conn = new SqlConnection(source); //그리드뷰에서 선택된 ROW의 첫번째 셀, 사번을 가지고 온다. 선택된사번 = GridView1.SelectedRow.Cells[0].Text; 사번.Text = 선택된사번; // DB에 요청할 쿼리 String sql = "SELECT * FROM 회원관리 WHERE 사번 = " + 선택된사번; // DB와 통신이 이루어지므로 try문 사용 try { // DB연결, 쿼리수행 conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); // 커서기능? 데이터를 읽기위한 리더 생성 SqlDataReader reader = cmd.ExecuteReader(); //데이터 읽기 -> 입력폼에 읽어들인 데이터 입력 while (reader.Read()) { 성명.Text = String.Format("{0}", reader["성명"]); 주민번호 = String.Format("{0}", reader["주민번호"]); 이메일.Text = String.Format("{0}", reader["이메일"]); 우편번호.Text = String.Format("{0}", reader["우편번호"]); 주소.Text = String.Format("{0}", reader["주소"]); 전화번호.Text = String.Format("{0}", reader["전화번호"]); 부서.SelectedValue = String.Format("{0}", reader["부서"]); 직위.SelectedValue = String.Format("{0}", reader["직위"]); } //주민등록번호 앞뒤 나눠서 입력 주민번호앞.Text = 주민번호.Substring(0, 6); 주민번호뒤.Text = 주민번호.Substring(6); //리더 종료 reader.Close(); } catch (Exception exception) { Console.WriteLine(exception); } finally { //DB 연결 해제 conn.Close(); } }//End Of Method : GridView1_SelectedIndexChanged protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if(e.CommandName == "ITEM") { //Connetion 객체 생성 for DB 연결 SqlConnection conn = new SqlConnection(source); //그리드뷰에서 선택된 ROW의 첫번째 셀, 사번을 가지고 온다. 선택된사번 = e.CommandArgument.ToString(); 사번.Text = 선택된사번; // DB에 요청할 쿼리 String sql = "SELECT * FROM 회원관리 WHERE 사번 = " + 선택된사번; // DB와 통신이 이루어지므로 try문 사용 try { // DB연결, 쿼리수행 conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); // 커서기능? 데이터를 읽기위한 리더 생성 SqlDataReader reader = cmd.ExecuteReader(); //데이터 읽기 -> 입력폼에 읽어들인 데이터 입력 while (reader.Read()) { 성명.Text = String.Format("{0}", reader["성명"]); 주민번호 = String.Format("{0}", reader["주민번호"]); 이메일.Text = String.Format("{0}", reader["이메일"]); 우편번호.Text = String.Format("{0}", reader["우편번호"]); 주소.Text = String.Format("{0}", reader["주소"]); 전화번호.Text = String.Format("{0}", reader["전화번호"]); 부서.SelectedValue = String.Format("{0}", reader["부서"]); 직위.SelectedValue = String.Format("{0}", reader["직위"]); } //주민등록번호 앞뒤 나눠서 입력 주민번호앞.Text = 주민번호.Substring(0, 6); 주민번호뒤.Text = 주민번호.Substring(6); //리더 종료 reader.Close(); } catch (Exception exception) { Console.WriteLine(exception); } finally { //DB 연결 해제 conn.Close(); } } } //테스트 코드 자바스크립트 -> C# 함수호출 [WebMethod] public static string HelloWorld() { return "hello"; } public void 버튼_테스트(object sender, GridViewEditEventArgs e) { } }//End Of Class : WebForm1 }
페이지에서 유효성 검사를 하고 필수 항목은 서버단에서 체크를 하도록 만들었음
다음 목표 --> 페이지에서 스크립트를 생성하여 유효성 검사를 마치고 서버로 접근하도록 변경하기