您的位置:首页 > 其它

简易聊天室的制作

2009-12-02 08:57 281 查看
要求使用三层架构模式实现简易在线聊天室的功能:



二、聊天页面


三、



1、 Models---为实体类库
实体类库是作为三成架构的辅助类库存在,数据在传递时都是传递一个封装好的实体;
数据库中一个表对应一个实体
2、 DAL----DATA ACCESS LAYER:数据访问层
数据库中一个表对应一个类文件,其中定义对这个表的增删改查等具体的数据库操作;
SQLhelper是最基本的数据库访问类,也放在该类库中
3、 BLL----Business Logic Layer:业务逻辑层
业务逻辑层中的类对具体的业务进行定义,需要调用DAL层去执行命令
4、Web(UI)---User Interface Layer:用户界面层
用户界面层是直接给用户打交道的,UI层要调用BLL层的类来实现具体的操作

聊天室的实体类有User和Message
User.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Models
{
public class User
{
#region 声明数据库T_user表中的字段
private int userId;
private string userName;
private string userPsd;
#endregion

#region 属性
//用户id
public int UserId
{
//写入
set { userId=value; }
//读取
get { return userId; }
}
//用户名
public string UserName
{
set { userName=value; }
get { return userName; }
}
//用户密码
public string UserPsd
{
set { userPsd=value; }
get { return userPsd; }
}
#endregion
}
}
Message.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Models
{
public class Message
{
#region 声明数据库T_message表中的字段
private int messageId;
private string userName;
private string messageContent;
private string emotion;
private string color;
private string messageTime;
private string face;
#endregion
#region 属性
//信息id
public int MessageId
{
set { messageId=value; }
get { return messageId; }
}
//用户名
public string UserName
{
set { userName = value; }
get { return userName; }
}
//聊天的内容
public string MessageContent
{
set { messageContent=value; }
get { return messageContent; }
}
//表情
public string Emotion
{
set { emotion = value; }
get { return emotion; }
}
//颜色
public string Color
{
set { color = value; }
get { return color; }
}
//发布留言的日期
public string MessageTime
{
set { messageTime = value; }
get { return messageTime; }
}
//图片
public string Face
{
set { face = value; }
get { return face; }
}

#endregion
}
}
DAL层有UserDAL.cs和MessageDAL.cs
UserDAL.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Models;
using Utility;
using System.Data;
using System.Data.SqlClient;
namespace DAL
{
public class UserDAL
{
/// <summary>
/// 添加用户
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public static bool AddUser(User user)
{
User users = new User();
string str = "insert into T_user(userName,userPsd) values(@userName,@userPsd)";
SqlParameter[] para = {
new SqlParameter("@userName",SqlDbType.NVarChar),
new SqlParameter("@userPsd",SqlDbType.NVarChar)
};
para[0].Value = user.UserName.ToString();
para[1].Value = user.UserPsd.ToString();
SqlHelper helper = new SqlHelper();
int result = -1;
result = helper.ExecuteReturnInt(str, para, CommandType.Text);
if (result > 0)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 根据用户名查询用户信息
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
public static bool GetUser(string userName)
{
string str = "select * from T_user where userName=@userName";
SqlParameter[] para = { new SqlParameter("@userName", SqlDbType.NVarChar) };
para[0].Value = userName;
SqlHelper helper = new SqlHelper();
DataTable dt = helper.ExecuteReturnDataTable(str, para, CommandType.Text);
if (dt.Rows.Count > 0)
{
//找到该用户信息后,说明用户不能注册
return false;
}
else
{
//没有找到用户,说明当前用户可以注册
return true;
}

}

/// <summary>
/// 根据用户名查询用户信息
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
public static User GetUserLogin(string userName)
{
string str = "select * from T_user where userName=@userName";
SqlParameter[] para = { new SqlParameter("@userName", SqlDbType.NVarChar) };
para[0].Value = userName;
SqlHelper helper = new SqlHelper();
DataTable dt = helper.ExecuteReturnDataTable(str, para, CommandType.Text);
if (dt.Rows.Count > 0)
{
//找到该用户信息后,说明用户不能注册
return null;
}
else
{
//没有找到用户,说明当前用户可以注册
User user = new User();
user.UserId = (int)(dt.Rows[0]["userId"]);
user.UserName = (string)(dt.Rows[0]["userName"].ToString());
user.UserPsd = (string)(dt.Rows[0]["userPsd"].ToString());
return user;
}

}
}

}

MessageDAL.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Models;
using Utility;
using System.Data;
using System.Data.SqlClient;
namespace DAL
{
public class MessageDAL
{
/// <summary>
/// 向信息表中添加信息
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public static bool Addmessage(Message message)
{
string str = "insert into T_message(messageTime,userName,emotion,messageContent,color,face) values(@messageTime,@userName,@emotion,@messageContent,@color,@face)";
SqlParameter[] para = {
new SqlParameter("@messageTime",SqlDbType.DateTime),
new SqlParameter("@userName",SqlDbType.NVarChar),
new SqlParameter("@emotion",SqlDbType.NVarChar),
new SqlParameter("@messageContent",SqlDbType.NVarChar),
new SqlParameter("@color",SqlDbType.NVarChar),
new SqlParameter("@face",SqlDbType.NVarChar)
};
para[0].Value = message.MessageTime;
para[1].Value = message.UserName;
para[2].Value = message.Emotion;
para[3].Value = message.MessageContent;
para[4].Value = message.Color;
para[5].Value = message.Face;
SqlHelper helper = new SqlHelper();
int result = -1;
result = helper.ExecuteReturnInt(str, para, CommandType.Text);
if (result > 0)
{
return true;
}
else
{
return false;
}
}

/// <summary>
/// 把数据行打包成Message数据实体
/// </summary>
/// <param name="dataRow">一条记录</param>
/// <returns>Message实体</returns>
public static Message GetMessageFromDataRow(DataRow dataRow)
{
Message message = new Message();
message.UserName = dataRow["userName"].ToString();
message.MessageContent = dataRow["messageContent"].ToString();
message.Emotion = dataRow["emotion"].ToString();
message.Color = dataRow["color"].ToString();
message.MessageTime = dataRow["messageTime"].ToString();
message.Face = dataRow["face"].ToString();
return message;
}

/// <summary>
/// 获得信息表中前10条用户的数据
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public static List<Message> Selectmessage()
{
List<Message> messagelist = new List<Models.Message>();
string str = "select top(10) * from T_message order by messageTime desc";
SqlHelper helper = new SqlHelper();
DataTable dt = helper.ExecuteReturnDataTable(str, null, CommandType.Text);
if (dt.Rows.Count > 0)
{
foreach (DataRow row in dt.Rows)
{
messagelist.Add(GetMessageFromDataRow(row));
}
return messagelist;
}
return null;
}
}
}

BLL有UserBLL.cs和MessageBLL.cs
UserBLL.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Models;
using DAL;
namespace BLL
{
public class UserBLL
{
/// <summary>
/// 添加用户
/// </summary>
/// <param name="user"></param>
public static bool AddUser(User user)
{
if (IsExist(user.UserName,user.UserPsd) == null)
{
return false;
}
else
{
return UserDAL.AddUser(user);
}
}
/// <summary>
/// 根据用户名得到用户信息
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
public static bool GetUser(string userName)
{
return UserDAL.GetUser(userName);
}
/// <summary>
/// 根据用户名得到用户登陆信息
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
public static User GetUserLogin(string userName)
{
return UserDAL.GetUserLogin(userName);
}
///// <summary>
///// 登陆验证
///// </summary>
//public static bool login(string userName,string userPsd,out User validUser)
//{
// User user = UserDAL.GetUser(userName);
// //没有该用户信息
// if (user == null)
// {
// validUser = null;
// return false;
// }
// //如果登陆的用户名与数据库中的用户名相同时,该用户为合法用户
// if (user.UserName == userName)
// {
// validUser = user;
// return true;
// }
// else
// {
// validUser = null;
// return false;
// }
//}
/// <summary>
/// 判断用户是否重名
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public static User IsExist(string userName,string userPsd)
{
bool flag = UserDAL.GetUser(userName);
User user = new User();
if (flag)
{
//重名
user.UserName = userName;
user.UserPsd = userPsd;
return user;
}

else
{
//不重名
return null;
}
}
}
}

MessageBLL.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using Models;
using System.Data;
namespace BLL
{
public class MessageBLL
{
/// <summary>
/// 获得信息表中前10条用户的数据
/// </summary>
/// <returns></returns>
public static List<Message> Selectmessage()
{
return MessageDAL.Selectmessage();
}

/// <summary>
/// 发表留言
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public static bool Addmessage(Message message)
{
return MessageDAL.Addmessage(message);
}
}
}

用户界面有登陆页面和留言页面组成
登陆页面前台:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.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 runat="server">
<title>登陆页面</title>

</head>
<body>
<form id="form1" runat="server">
<div>
<table style="width: 65%;" cellpadding="0" cellspacing="0">
<tr>
<td align="center" style=" height:60px">
<img alt="" src="image/l聊天室.jpg" height="30px" width="120px" />
</td>
</tr>
</table>
<table style="width: 100%;">
<tr>
<td align="right"style=" height:30px" >
用户名:
</td>
<td align="left" style=" height:30px">
<asp:TextBox ID="txt_username" runat="server" TextMode="SingleLine" Columns="22"></asp:TextBox>
</td>
</tr>
<tr>
<td align="right" style=" height:30px">
密 码:
</td>
<td align="left" style=" height:30px">
<asp:TextBox ID="txt_userpsd" runat="server" TextMode="Password" Columns="24"></asp:TextBox>
</td>
</tr>
</table>
<table style="width: 65%;">
<tr>
<td align="center">
<asp:Button ID="bt_Login" runat="server" Text="登陆" onclick="bt_Login_Click" />
         
<asp:Button ID="bt_register" runat="server" Text="注册"
onclick="bt_register_Click" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
后台:
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Models;
using BLL;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void bt_Login_Click(object sender, EventArgs e)
{
string username = txt_username.Text.Trim();
string password = txt_userpsd.Text.Trim();
if (username == "")
{
Response.Write("<script>alert('请输入用户名')</script>");
}
//if (this.txt_username.Text.Trim().Length == 0)
// {
// Response.Write("<script>alert('请输入用户名')</script>");
// }
if (password == "")
{
Response.Write("<script>alert('请输入密码')</script>");
}
//if (this.txt_userpsd.Text.Trim().Length == 0)
//{
// Response.Write("<script>alert('请输入密码')</script>");
//}
//if (UserBLL.login(this.txt_username.Text, this.txt_userpsd.Text, out user))
//{
// Session["user"] = user;
// Response.Redirect("index.aspx");
//}
if (UserBLL.GetUser(username) != null)
{
Session["username"] = username;
Response.Redirect("index.aspx");
}
else
{
Response.Write("<script>alert('您输入的用户名或者密码错误')</script>");
}
}
protected void bt_register_Click(object sender, EventArgs e)
{
Response.Redirect("Register.aspx");
}
}
留言页面的前台:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="index" %>
<!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>
<style type="text/css">
.style1
{
width: 653px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<div>
<p align="center" style="height: 41px; font-style: normal; font-size: x-large; color: Blue;">
*欢迎<asp:Label ID="L_name" runat="server" Text=""></asp:Label>来到MyChatRoom*<br />
<asp:Button ID="bt_return" runat="server" Text="返回登录" OnClick="bt_return_Click" /></p>
</div>
<table style="width: 100%;">
<tr>
<td class="style1">
<%-- <iframe src="Iframe.aspx" scrolling="yes" />--%>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<br />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DataList ID="dl_iframe" runat="server">
<ItemTemplate>
<div style='color: <%#Eval("color")%>'>
<%#Eval("messageTime") %>
<%#"("+Eval("userName")+")" %>
<%#Eval("emotion")+"说:" %>
<%#Eval("messageContent") %>
</div>
</ItemTemplate>
</asp:DataList>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer_MessageList" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>
<asp:Timer ID="Timer_MessageList" runat="server" Interval="1000" OnTick="Timer_MessageList_Tick">
</asp:Timer>
</td>
</tr>
<tr>
<td class="style1">
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/image/1.jpg" OnClick="ImageButton1_Click" />
<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/image/2.jpg" OnClick="ImageButton2_Click" />
<asp:ImageButton ID="ImageButton3" runat="server" ImageUrl="~/image/3.jpg" OnClick="ImageButton3_Click" />
<asp:ImageButton ID="ImageButton4" runat="server" ImageUrl="~/image/4.jpg" OnClick="ImageButton4_Click" />
<asp:ImageButton ID="ImageButton5" runat="server" ImageUrl="~/image/5.jpg" OnClick="ImageButton5_Click" />
</td>
</tr>
<tr>
<td class="style1">
<asp:TextBox ID="txt_content" runat="server" TextMode="MultiLine" Height="48px" Width="447px"></asp:TextBox>
</td>
</tr>
</table>
<table style="width: 40%;">
<tr>
<td align="right">
<asp:DropDownList ID="ddl_color" runat="server">
<asp:ListItem Value="black" Selected="True">黑色</asp:ListItem>
<asp:ListItem Value="red">红色</asp:ListItem>
<asp:ListItem Value="blue">蓝色</asp:ListItem>
<asp:ListItem Value="purple">紫色</asp:ListItem>
</asp:DropDownList>
</td>
<td align="left">
<asp:DropDownList ID="ddl_emotion" runat="server">
<asp:ListItem Value="微笑的" Selected="True">微笑的</asp:ListItem>
<asp:ListItem Value="高兴的">高兴的</asp:ListItem>
<asp:ListItem Value="伤心的">伤心的</asp:ListItem>
<asp:ListItem Value="沮丧的">沮丧的</asp:ListItem>
</asp:DropDownList>
</td>
<td align="left">
<asp:Button ID="bt_talk" runat="server" Text="发言" OnClick="bt_talk_Click" />
</td>
<td align="left">
<asp:Button ID="bt_leave" runat="server" Text="离开" OnClick="bt_leave_Click" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
留言页面的后台:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Models;
using DAL;
using BLL;
using System.Text.RegularExpressions;
using System.Collections.Generic;
public partial class index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["username"] != null)
{
//L_name.Text = ((User)(Session["user"])).UserName;
L_name.Text = Session["username"].ToString();
}
else
{
Response.Write("<script>alert('请先登录');location.href('Login.aspx')</script>");
}
}
}
/// <summary>
/// 发言
/// </summary>
protected void bt_talk_Click(object sender, EventArgs e)
{
if (Session["username"] != null)
{
string messageinfo = txt_content.Text.Trim();
//使用正则表达式的Replace方法
string result1 = Regex.Replace(messageinfo, @"{!", "<img src='image/");
string result2 = Regex.Replace(result1, @"!}", ".jpg'/>");
Message mess = new Message();
DateTime date = DateTime.Now;
mess.MessageTime = date.ToString();
mess.UserName = Session["username"].ToString();
mess.Emotion = ddl_emotion.SelectedValue;
mess.MessageContent = result2;
mess.Color = ddl_color.SelectedValue;
mess.Face = "";
bool result = MessageBLL.Addmessage(mess);
if (result == true)
{
Response.Write("<script>alert('发言成功')</script>");
}
else
{
Response.Write("<script>alert('发言失败')</script>");
}
}
}

/// <summary>
/// 离开
/// </summary>
protected void bt_leave_Click(object sender, EventArgs e)
{
//清除对象
Session["username"] = null;
//Session.Contents.Remove("user");
Response.Redirect("Login.aspx");
}
/// <summary>
/// 返回登录
/// </summary>
protected void bt_return_Click(object sender, EventArgs e)
{
Response.Redirect("Login.aspx");
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
txt_content.Text += "{!1!}"; //1是图片的名称,下同
}
protected void ImageButton2_Click(object sender, ImageClickEventArgs e)
{
txt_content.Text += "{!2!}";
}
protected void ImageButton3_Click(object sender, ImageClickEventArgs e)
{
txt_content.Text += "{!3!}";
}
protected void ImageButton4_Click(object sender, ImageClickEventArgs e)
{
txt_content.Text += "{!4!}";
}
protected void ImageButton5_Click(object sender, ImageClickEventArgs e)
{
txt_content.Text += "{!5!}";
}
protected void Timer_MessageList_Tick(object sender, EventArgs e)
{
bindmessagelist();
}
protected void bindmessagelist()
{
//messagelist就相当于一个数据表
List<Message> messagelist = MessageBLL.Selectmessage();
dl_iframe.DataSource = messagelist;
dl_iframe.DataBind();
}
}
iframe页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Iframe.aspx.cs" Inherits="Iframe" %>
<!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>
<meta http-equiv="refresh" content="5" />
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DataList ID="dl_iframe" runat="server">
<ItemTemplate>
<div style=' color:<%#Eval("color")%>'>
<%#Eval("messageTime") %>
<%#"("+Eval("userName")+")" %>
<%#Eval("emotion")+"说:" %>
<%#Eval("messageContent") %>
</div>
</ItemTemplate>
</asp:DataList>
</div>
</form>
</body>
</html>

后台:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Models;
using BLL;
using DAL;
using System.Collections.Generic;
public partial class Iframe : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//messagelist就相当于一个数据表
List<Message> messagelist = MessageBLL.Selectmessage();
dl_iframe.DataSource = messagelist;
dl_iframe.DataBind();

}
}

}

数据库访问类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
namespace Utility
{
public class SqlHelper
{
#region 数据访问字段
private string str;
private SqlConnection conn;
private SqlCommand comm;
#endregion

/// <summary>
/// 构造函数
/// </summary>
public SqlHelper()
{
string str = ConfigurationManager.ConnectionStrings["CONNECTIONSTRING"].ConnectionString;
conn = new SqlConnection(str);
}
/// <summary>
/// 返回整数(修改,删除,增加数据库后影响的数据库记录的条数)
/// </summary>
public int ExecuteReturnInt(string cmdText, SqlParameter[] para, CommandType Type)
{
try
{
conn.Open();
comm = new SqlCommand(cmdText,conn);
comm.CommandType = Type;
if (para != null)
{
for (int i = 0; i < para.Length; i++)
{
comm.Parameters.Add(para[i]);
}
}
int result = -1;
result = comm.ExecuteNonQuery();
return result;
}
catch(SqlException se)
{
throw se;
}
finally
{
conn.Close();
}
}
/// <summary>
/// 返回DataTable
/// </summary>
/// <param name="cmdText"></param>
/// <param name="para"></param>
/// <param name="Type"></param>
/// <returns></returns>
public DataTable ExecuteReturnDataTable(string cmdText, SqlParameter[] para, CommandType Type)
{
try
{
conn.Open();
comm = new SqlCommand(cmdText,conn);
comm.CommandType = Type;
if (para != null)
{
for (int i = 0; i < para.Length; i++)
{
comm.Parameters.Add(para[i]);
}
}
DataTable dt = null;
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(comm);
da.Fill(ds);
dt = ds.Tables[0];
return dt;
}
catch (SqlException se)
{
throw se;
}
finally
{
conn.Close();
}
}
}
}

注意的知识点:
1.session的使用,session可以保存一个对象,也可以保存一个属性,如果保存一个对象,在使用对象的某一个属性时,需要进行转换
((User)(Session["user"])).UserName User为Models层中的一个实体即一个类,user为User的对象,UserName 为对象user的一个属性,若保存某一属性的话,直接使用Session["username"]即可,
在清空session保存的对象时使用Session.Contents.Remove("user"),
而清空某一个属性时,只需Session["username"]=null就可以
2.在一个页面中嵌套另一个页面,并且实现刷新,有两种方法,一种是使用HTML的标签iframe,用这种方法刷新是在页面的头部加上<meta http-equiv="refresh" content="5" />
另一种是使用AJAX控件实现无刷新,
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<br />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DataList ID="dl_iframe" runat="server">
<ItemTemplate>
<div style='color: <%#Eval("color")%>'>
<%#Eval("messageTime") %>
<%#"("+Eval("userName")+")" %>
<%#Eval("emotion")+"说:" %>
<%#Eval("messageContent") %>
</div>
</ItemTemplate>
</asp:DataList>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer_MessageList" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>
<asp:Timer ID="Timer_MessageList" runat="server" Interval="1000" OnTick="Timer_MessageList_Tick">
</asp:Timer>

通过定时器来实现刷新, <ContentTemplate> </ContentTemplate>之间存放在另一个页面中嵌套的内容。
3.在页面中插入表情,可以使用<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/image/1.jpg" OnClick="ImageButton1_Click" />,本页面使用TextBox文本框来接收留言信息,但是TextBox只能写入文本,不能够加入图片, string messageinfo = txt_content.Text.Trim();
//使用正则表达式的Replace方法
string result1 = Regex.Replace(messageinfo, @"{!", "<img src='image/");
string result2 = Regex.Replace(result1, @"!}", ".jpg'/>");这一可以使图片以符号的形式在文本框中出现而不是图片形式,在图片输出的时候,,"{" 和"}"起到标示图片的作用。输出时,前一个"["用"<img src='image/"代替,后一个"]"用".jpg'>"代替,即:<img src='image/1.jpg'/>。也可以使用DataList控件将图片从数据库读出来显示在页面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: