ASP.NET 로그인을 통한 게시판 사용 예제
회원 전용 게시판
- 비회원은 게시물 내용까지만 볼수있게..(**)
- 회원만 게시물 상세보기 가능
- 비회원 글쓰기 불가(**)
- 회원만 모든 기능 사용 가능
- 비회원은 List.aspx와 View.aspx만 사용 가능
Login.aspx
Logout.aspx
web.config
<?xml version="1.0"?>
<!--
ASP.NET 응용 프로그램을 구성하는 방법에 대한 자세한 내용을 보려면
http://go.microsoft.com/fwlink/?LinkId=169433 을 방문하십시오.
-->
<configuration>
<connectionStrings>
<add name="conStr" connectionString="server=localhost;database=ASPNET;uid=sa;pwd=zangna1" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation debug="false" targetFramework="4.0" />
<httpRuntime requestValidationMode="2.0" />
<pages theme="basic" />
<authentication mode="Forms">
<forms defaultUrl="~/List.aspx" loginUrl="~/Login.aspx" name="_Auth" protection="All" timeout="20" />
</authentication>
</system.web>
</configuration>
Add.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Board.master" AutoEventWireup="true" CodeFile="Add.aspx.cs" Inherits="Add" ValidateRequest="false" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" runat="server"
contentplaceholderid="ContentPlaceHolder1">
<table class="table" style="width:600px;">
<tr>
<td align="center" bgcolor="Silver" width="150">
제목</td>
<td width="450">
<asp:TextBox ID="TextBoxSubject" runat="server" CssClass="txt" Width="95%"></asp:TextBox>
</td>
</tr>
<tr>
<td align="center" bgcolor="Silver" width="150">
내용</td>
<td width="450">
<asp:TextBox ID="TextBoxContent" runat="server" CssClass="txt" Height="150px"
TextMode="MultiLine" Width="95%"></asp:TextBox>
</td>
</tr>
<tr>
<td align="center" bgcolor="Silver" width="150">
태그적용</td>
<td width="450">
<asp:CheckBox ID="CheckBoxTag" runat="server" Text="HTML 태그 적용함" />
</td>
</tr>
</table>
<div style="text-align:center;margin:10px;">
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/images/list.gif"
onclick="ImageButton1_Click" ValidationGroup="list" />
<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/images/write.gif"
onclick="ImageButton2_Click" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server"
ControlToValidate="TextBoxSubject" Display="None" ErrorMessage="제목을 입력하세요."
SetFocusOnError="True"></asp:RequiredFieldValidator>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server"
ControlToValidate="TextBoxContent" Display="None" ErrorMessage="내용을 입력하세요."
SetFocusOnError="True"></asp:RequiredFieldValidator>
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
ShowMessageBox="True" ShowSummary="False" />
</div>
</asp:Content>
Add.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;
using System.Data.SqlClient;
using System.Configuration;
public partial class Add : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//비회원이 해당 주소를 알아내서 직접 접속했을때..
if (!this.Page.User.Identity.IsAuthenticated)
{
string script = "<script type='text/javascript'>alert('권한이 없습니다.');location.href='List.aspx';</script>";
Response.Write(script);
Response.End();
}
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
//List
Response.Redirect("List.aspx");
}
protected void ImageButton2_Click(object sender, ImageClickEventArgs e)
{
//Write
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "insert into Board (subject, content, tag, userIP, id) values (@subject, @content, @tag, @userIP, @id)";
//매개변수
cmd.Parameters.Add("@subject", SqlDbType.NVarChar, 100);
cmd.Parameters.Add("@content", SqlDbType.NVarChar, 3000);
cmd.Parameters.Add("@tag", SqlDbType.Char, 1);
cmd.Parameters.Add("@id", SqlDbType.VarChar, 20);
cmd.Parameters.Add("@userIP", SqlDbType.VarChar, 15);
//값
cmd.Parameters["@subject"].Value = TextBoxSubject.Text;
cmd.Parameters["@content"].Value = TextBoxContent.Text;
cmd.Parameters["@tag"].Value = CheckBoxTag.Checked ? "y" : "n";
cmd.Parameters["@id"].Value = this.Page.User.Identity.Name;
cmd.Parameters["@userIP"].Value = Request.UserHostAddress;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
string script = @"<script type='text/javascript'>
alert('글쓰기 완료!!');
location.href = 'List.aspx';
</script>";
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "add", script);
}
}
Del.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Board.master" AutoEventWireup="true" CodeFile="Del.aspx.cs" Inherits="Del" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<table class="table" style="width:300px;" align="center">
</table>
<div style="text-align:center;margin:10px;">
<asp:ImageButton ID="ImageButton1" runat="server"
ImageUrl="~/images/back.gif" />
<asp:ImageButton ID="ImageButton2" runat="server"
ImageUrl="~/images/delete.gif" onclick="ImageButton2_Click" />
</div>
</asp:Content>
Del.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;
using System.Data.SqlClient;
using System.Configuration;
public partial class Del : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//비회원이 해당 주소를 알아내서 직접 접속했을때..
if (!this.Page.User.Identity.IsAuthenticated)
{
string script = "<script type='text/javascript'>alert('권한이 없습니다.');location.href='List.aspx';</script>";
Response.Write(script);
Response.End();
}
}
protected void ImageButton2_Click(object sender, ImageClickEventArgs e)
{
//삭제하기
//1. 암호가 일치?
//2. 삭제 or 취소
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select id from Board where seq=@seq";
cmd.Parameters.Add("@seq", SqlDbType.Int);
cmd.Parameters["@seq"].Value = Request.QueryString["seq"];
con.Open();
string id = cmd.ExecuteScalar().ToString();
string script = "";
if (id == this.Page.User.Identity.Name)
{
//암호가 일치하기 때문에.. 게시물 Delete
cmd.CommandText = @"delete from Board
where seq=@seq";
cmd.ExecuteNonQuery();//delete
script = @"<script type='text/javascript'>
alert('삭제 완료!!');
location.href='List.aspx';
</script>";
}
else
{
script = @"<script type='text/javascript'>
alert('삭제 권한이 없습니다.!!');
</script>";
}
con.Close();
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "edit", script);
}
}
Edit.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Board.master" AutoEventWireup="true" CodeFile="Edit.aspx.cs" Inherits="Edit" ValidateRequest="false" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<table class="table" style="width:600px;">
<tr>
<td align="center" bgcolor="Silver" width="150">
제목</td>
<td width="450">
<asp:TextBox ID="TextBoxSubject" runat="server" CssClass="txt" Width="95%"></asp:TextBox>
</td>
</tr>
<tr>
<td align="center" bgcolor="Silver" width="150">
내용</td>
<td width="450">
<asp:TextBox ID="TextBoxContent" runat="server" CssClass="txt" Height="150px"
TextMode="MultiLine" Width="95%"></asp:TextBox>
</td>
</tr>
<tr>
<td align="center" bgcolor="Silver" width="150">
태그적용</td>
<td width="450">
<asp:CheckBox ID="CheckBoxTag" runat="server" Text="HTML 태그 적용함" />
</td>
</tr>
</table>
<div style="text-align:center;margin:10px;">
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/images/back.gif"
onclick="ImageButton1_Click" ValidationGroup="list" Width="39px" />
<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/images/modify.gif"
onclick="ImageButton2_Click" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server"
ControlToValidate="TextBoxSubject" Display="None" ErrorMessage="제목을 입력하세요."
SetFocusOnError="True"></asp:RequiredFieldValidator>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server"
ControlToValidate="TextBoxContent" Display="None" ErrorMessage="내용을 입력하세요."
SetFocusOnError="True"></asp:RequiredFieldValidator>
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
ShowMessageBox="True" ShowSummary="False" />
</div>
</asp:Content>
Edit.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;
using System.Data.SqlClient;
using System.Configuration;
public partial class Edit : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//비회원이 해당 주소를 알아내서 직접 접속했을때..
if (!this.Page.User.Identity.IsAuthenticated)
{
string script = "<script type='text/javascript'>alert('권한이 없습니다.');location.href='List.aspx';</script>";
Response.Write(script);
Response.End();
}
if (!IsPostBack)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select * from Board where seq=@seq";
cmd.Parameters.Add("@seq", SqlDbType.Int);
cmd.Parameters["@seq"].Value = Request.QueryString["seq"];
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
//출력
TextBoxSubject.Text = reader["subject"].ToString();
//글내용
TextBoxContent.Text = reader["content"].ToString();
CheckBoxTag.Checked = reader["tag"].ToString() == "y" ? true : false;
}
reader.Close();
con.Close();
}
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
string script = null;
script = @"<script type='text/javascript'>
history.go(-2);
</script>";
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "edit", script);
}
protected void ImageButton2_Click(object sender, ImageClickEventArgs e)
{
//수정하기
//1. 암호가 일치?
//2. 수정 or 취소
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select id from Board where seq=@seq";
cmd.Parameters.Add("@seq", SqlDbType.Int);
cmd.Parameters["@seq"].Value = Request.QueryString["seq"];
con.Open();
string id = cmd.ExecuteScalar().ToString();
string script = "";
//글쓴이가 현재 로그인한 사람이냐??
if (id == this.Page.User.Identity.Name)
{
//암호가 일치하기 때문에.. 게시물 Update
cmd.CommandText = @"update Board set
subject=@subject,
content=@content,
tag=@tag,
userIP=@userIP,
regDate=getdate()
where seq=@seq";
//매개변수
cmd.Parameters.Add("@subject", SqlDbType.NVarChar, 100);
cmd.Parameters.Add("@content", SqlDbType.NVarChar, 3000);
cmd.Parameters.Add("@tag", SqlDbType.Char, 1);
cmd.Parameters.Add("@userIP", SqlDbType.VarChar, 15);
//값
cmd.Parameters["@subject"].Value = TextBoxSubject.Text;
cmd.Parameters["@content"].Value = TextBoxContent.Text;
cmd.Parameters["@tag"].Value = CheckBoxTag.Checked ? "y" : "n";
cmd.Parameters["@userIP"].Value = Request.UserHostAddress;
cmd.ExecuteNonQuery();//update
script = @"<script type='text/javascript'>
alert('수정 완료!!');
location.href='List.aspx';
</script>";
}
else
{
script = @"<script type='text/javascript'>
alert('수정 권한이 없습니다.!!');
</script>";
}
con.Close();
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "edit", script);
}
}
List.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Board.master" AutoEventWireup="true" CodeFile="List.aspx.cs" Inherits="List" Trace="true" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateColumns="False" CssClass="table" DataKeyNames="seq"
DataSourceID="SqlDataSource1" onrowdatabound="GridView1_RowDataBound"
Width="600px">
<Columns>
<asp:BoundField DataField="seq" HeaderText="번호" InsertVisible="False"
ReadOnly="True" SortExpression="seq">
<ItemStyle HorizontalAlign="Center" Width="50px" />
</asp:BoundField>
<asp:HyperLinkField DataNavigateUrlFields="seq"
DataNavigateUrlFormatString="View.aspx?seq={0}" DataTextField="subject"
HeaderText="제목">
<ItemStyle Width="340px" />
</asp:HyperLinkField>
<asp:BoundField DataField="name" HeaderText="이름" SortExpression="name">
<ItemStyle HorizontalAlign="Center" Width="80px" />
</asp:BoundField>
<asp:BoundField DataField="regDate" DataFormatString="{0:yyyy-MM-dd}"
HeaderText="날짜" SortExpression="regDate">
<ItemStyle HorizontalAlign="Center" Width="80px" />
</asp:BoundField>
<asp:BoundField DataField="readCount" HeaderText="읽음"
SortExpression="readCount">
<ItemStyle HorizontalAlign="Center" Width="50px" />
</asp:BoundField>
</Columns>
<HeaderStyle BorderStyle="Solid" BorderWidth="1px" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:conStr %>"
SelectCommand="select [seq], [name], [subject], [readcount], [regdate], [email] from [Board] as b inner join Member as m on b.id = m.id order by [seq] desc">
</asp:SqlDataSource>
<div style="text-align:center;margin:10px;">
<asp:ImageButton ID="ImageButton1" runat="server"
ImageUrl="~/images/write.gif" onclick="ImageButton1_Click" />
</div>
</asp:Content>
List.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;
public partial class List : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//조회수 증가용 쿠키 할당
Response.Cookies["read"].Value = "n";
}
if (this.User.Identity.IsAuthenticated)
ImageButton1.Visible = true;
else
ImageButton1.Visible = false;
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
//글쓰기
Response.Redirect("Add.aspx");
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//1. 제목이 길면.. 자르기
//e.Row <- 한행(GridViewRow) x 5개
HyperLink subject = e.Row.Cells[1].Controls[0] as HyperLink;
if (subject.Text.Length > 20)
{
subject.Text = subject.Text.Substring(0, 20) + "...";
}
//2. 글쓴지 일정시간이내면.. new.gif 표시
// 30분이내
//Response.Write(e.Row.Cells[3].Text + "<br />");
//현재 바인딩되거나 바인딩된 데이터에 접근하는 방법
//A. 출력된 결과값에 접근하는 방법(Cells을 사용)
//Response.Write(e.Row.Cells[2].Text);
//B. (출력과 상관없이)바인딩되는 원본에 접근하는 방법
// 조건 : 데이터원본에는 있어야함(select의 대상)
//데이터원본(seq, subject, name, regDate, readCount, email)
DataRowView row = e.Row.DataItem as DataRowView;
//Response.Write(row["email"].ToString());
//Response.Write(row["regDate"].ToString());
DateTime regDate = (DateTime)row["regDate"];
TimeSpan gap = DateTime.Now - regDate;
if (gap.TotalMinutes <= 30)
{
//30이내에 쓴글
//e.Row.Cells[1]
LiteralControl img = new LiteralControl("<img src='images/new.gif' alt='새글' style='margin-left:5px;' />");
e.Row.Cells[1].Controls.Add(img);
//e.Row.Cells[1].Controls.AddAt(0, img);
}
}
}
}
Login.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Board.master" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<%--<table class="table" width="300" align="center">--%>
<table class="table" style="width:300px;margin:0px auto;">
<tr>
<td align="center" bgcolor="#CCCCCC" width="150">
아이디</td>
<td width="150">
<asp:TextBox ID="TextBoxID" runat="server" CssClass="txt" Width="100px"></asp:TextBox>
</td>
</tr>
<tr>
<td align="center" bgcolor="#CCCCCC" width="150">
암호</td>
<td width="150">
<asp:TextBox ID="TextBoxPwd" runat="server" CssClass="txt"
TextMode="Password" Width="100px"></asp:TextBox>
</td>
</tr>
</table>
<div style="text-align:center;margin:10px;">
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/images/list.gif"
onclick="ImageButton1_Click" />
<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/images/home.gif"
onclick="ImageButton2_Click" />
</div>
</asp:Content>
Login.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;
using System.Data.SqlClient;
using System.Configuration;
using System.Web.Security;//
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
//게시판으로 이동하기
Response.Redirect("List.aspx");
}
protected void ImageButton2_Click(object sender, ImageClickEventArgs e)
{
//로그인
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select * from Member where id=@id and pwd=@pwd";
cmd.Parameters.Add("@id", SqlDbType.VarChar, 20);
cmd.Parameters.Add("@pwd", SqlDbType.VarChar, 20);
cmd.Parameters["@id"].Value = TextBoxID.Text;
cmd.Parameters["@pwd"].Value = TextBoxPwd.Text;
con.Open();
string script = "";
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
//인증
FormsAuthentication.SetAuthCookie(TextBoxID.Text, false);
//추가 정보 기억
Response.Cookies["name"].Value = reader["name"].ToString();
Response.Cookies["email"].Value = reader["email"].ToString();
script = "<script type='text/javascript'>alert('로그인 성공!!\\r\\n게시판으로 이동합니다.'); location.href='List.aspx';</script>";
}
else
{
script = "<script type='text/javascript'>alert('로그인 실패!!');</script>";
}
//if (cmd.ExecuteScalar().ToString() == "1")
//{
// //인증
// FormsAuthentication.SetAuthCookie(TextBoxID.Text, false);
// script = "<script type='text/javascript'>alert('로그인 성공!!\r\n게시판으로 이동합니다.'); location.href='List.aspx';</script>";
//}
//else
//{
// script = "<script type='text/javascript'>alert('로그인 실패!!');</script>";
//}
reader.Close();
con.Close();
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "login", script);
}
}
Logout.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Board.master" AutoEventWireup="true" CodeFile="Logout.aspx.cs" Inherits="Logout" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<div style="text-align:center;">
<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/images/home.gif"
onclick="ImageButton2_Click" />
</div>
</asp:Content>
Logout.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 Logout : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ImageButton2_Click(object sender, ImageClickEventArgs e)
{
string script = null;
script = @"<script type='text/javascript'>
alert('로그 아웃 합니다.');
</script>";
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "edit", script);
Response.Write("ddd");
//로그아웃!!
System.Web.Security.FormsAuthentication.SignOut();
//쿠키 해제
Response.Cookies["name"].Expires = DateTime.MinValue;
Response.Cookies["email"].Expires = DateTime.MinValue;
Response.Redirect("Login.aspx");
}
}
View.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Board.master" AutoEventWireup="true" CodeFile="View.aspx.cs" Inherits="View" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<table class="table" style="width:600px;">
<tr>
<td align="center" bgcolor="Silver" width="150">
이름</td>
<td width="450">
<asp:Label ID="LabelName" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td align="center" bgcolor="Silver" width="150">
이메일</td>
<td width="450">
<asp:Label ID="LabelEmail" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td align="center" bgcolor="Silver" width="150">
제목</td>
<td width="450">
<asp:Label ID="LabelSubject" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td align="center" bgcolor="Silver" width="150">
내용</td>
<td width="450" style="padding:10px;">
<asp:Label ID="LabelContent" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td align="center" bgcolor="Silver" width="150">
번호</td>
<td width="450">
<asp:Label ID="LabelSeq" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td align="center" bgcolor="Silver" width="150">
읽음</td>
<td width="450">
<asp:Label ID="LabelReadCount" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td align="center" bgcolor="Silver" width="150">
날짜</td>
<td width="450">
<asp:Label ID="LabelRegDate" runat="server"></asp:Label>
</td>
</tr>
</table>
<div style="text-align:center;margin:10px;">
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/images/list.gif"
onclick="ImageButton1_Click" ValidationGroup="list" />
<asp:ImageButton ID="ImageButton3" runat="server" ImageUrl="~/images/modify.gif"
onclick="ImageButton3_Click" />
<asp:ImageButton ID="ImageButton4" runat="server" ImageUrl="~/images/delete.gif"
onclick="ImageButton4_Click" />
</div>
</asp:Content>
View.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;
using System.Data.SqlClient;
using System.Configuration;
public partial class View : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//seq의 상세보기
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "update Board set readCount = readCount + 1 where seq=@seq;";
cmd.Parameters.Add("@seq", SqlDbType.Int);
cmd.Parameters["@seq"].Value = Request.QueryString["seq"];
con.Open();
//쿠키 확인 작업
if (Request.Cookies["read"] == null || Request.Cookies["read"].Value == "n")
{
cmd.ExecuteNonQuery();//조회수 증가
Response.Cookies["read"].Value = "y";
}
cmd.CommandText = "select * from Board as b inner join Member as m on b.id=m.id where seq=@seq";
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
//출력
LabelName.Text = string.Format("{0} [{1}]", reader["name"].ToString(), reader["userIP"].ToString());
LabelEmail.Text = reader["email"].ToString();
LabelSubject.Text = reader["subject"].ToString();
//글내용
string content = reader["content"].ToString();
//태그적용 안함 처리 ( < -> <)
if (reader["tag"].ToString() == "n")
{
content = Server.HtmlEncode(content);
}
//<script> 무조건 적용안함
content = content.Replace("<script", "<script").Replace("</script>", "</script>");
//엔터값처리 -> <br />
content = content.Replace("\r\n", "<br />");
LabelContent.Text = content;
LabelSeq.Text = reader["seq"].ToString();
LabelReadCount.Text = reader["readCount"].ToString();
LabelRegDate.Text = reader["regDate"].ToString();
}
reader.Close();
con.Close();
}
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
//List
Response.Redirect("List.aspx");
}
protected void ImageButton3_Click(object sender, ImageClickEventArgs e)
{
//수정 Edit.aspx?seq=5
Response.Redirect("Edit.aspx?seq=" + Request.QueryString["seq"]);
}
protected void ImageButton4_Click(object sender, ImageClickEventArgs e)
{
//삭제 Del.aspx?seq=5
Response.Redirect("Del.aspx?seq=" + Request.QueryString["seq"]);
}
}