前言


       状态管理是在同一页或不同页的多个请求发生时,维护状态和页信息的过程。因为Web应用程序的通信协议使用了无状态的HTTP协议,所以当客户端请求页面时,ASP.NET服务器端都会重新生成一个网页实例。此时,旧网页的任务完成,旧网页的实例也随之消失。这种无状态,意味着客户端用户在浏览器中的一些状态或是对数据的一些修改都将丢失。
        为了弥补这种基于web应用程序的固有限制,ASP.NET提供了多种用于管理状态的功能。

简单聊天室


这里运用System.Web命名空间的那些管理状态的类,做一个简单的聊天室
0.效果图
 
【 不知道为什么下拉框DropDownList1的选中项老是获取不了,有谁知道的还请告诉我一声啊,哈哈哈】

1.Default.aspx页面:用于用户登录,一个用户文本框,一个登录按钮,给登录按钮添加事件
后台主要代码
  1. protected void Button1_Click(object sender, EventArgs e)
  2. {
  3. Application.Lock();
  4. int intUserNum;
  5. string user;
  6. string[] users;
  7. string strUserName;
  8. intUserNum = Convert.ToInt32(Application["userNum"]);
  9. if (intUserNum > 20)
  10. {
  11. Response.Write("在线人数超过20人,不能登录了!");
  12. Response.Redirect("Default.aspx");
  13. }
  14. else {
  15. user = Application["user"].ToString();
  16. users = user.Split(',');
  17. strUserName = TextBox1.Text.Trim();
  18. for (int i = 0; i < intUserNum; i++) {
  19. if (users[i] == strUserName)
  20. {
  21. Response.Redirect("Default.aspx?value=1");
  22. }
  23. }
  24. if (users == null)
  25. Application["user"] = strUserName;
  26. else
  27. Application["user"] += "," + strUserName;
  28. intUserNum += 1;
  29. Application["userNum"] = intUserNum.ToString();
  30. Session["user"] = strUserName;
  31. Application.UnLock();
  32. Response.Redirect("main.aspx"); ;
  33. }
  34. }
2.Left.aspx页面:主要用于呈现在线人数和在线人员名单,由2个label和1个textbox组成
后台主要代码
  1. public partial class Left : System.Web.UI.Page
  2. {
  3. private ArrayList ItemList = new ArrayList();
  4. protected void Page_Load(object sender, EventArgs e)
  5. {
  6. Application.Lock();
  7. if (Session["user"] == null)
  8. Response.Redirect("Default.aspx");
  9. else
  10. Label1.Text = Session["user"].ToString();
  11. int userCount = int.Parse(Application["userNum"].ToString());
  12. Label2.Text = userCount.ToString();
  13. string user = Application["user"].ToString();
  14. string[] users = user.Split(',');
  15. for (int i = (userCount-1); i >= 0; i--) {
  16. ItemList.Add(users[i]);
  17. }
  18. ListBox1.DataSource = ItemList;
  19. ListBox1.DataBind();
  20. Application.UnLock();
  21. }
  22. }
3.Right.aspx页面:用于呈现聊天记录,由一个textbox组成
后台主要代码
  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. Application.Lock();
  4. if (!IsPostBack) {
  5. string chat=Application["chats"].ToString();
  6. int chatNum=int.Parse(Application["current"].ToString()) ;
  7. string[] chats = chat.Split(',');
  8. for (int i = chatNum - 1; i >= 0; i--)
  9. {
  10. if(chatNum==0)
  11. TextBox1.Text=chats[i];
  12. else
  13. TextBox1.Text=TextBox1.Text+"\n"+chats[i];
  14. }
  15. }
  16. Application.UnLock();
  17. }
4.bottom.aspx页面:用于用户向其他用户发送消息,由一个下拉列表,文本框和发送按钮组成,按钮要添加事件
后台主要代码
  1. public partial class bottom : System.Web.UI.Page
  2. {
  3. protected void Page_Load(object sender, EventArgs e)
  4. {
  5. Application.Lock();
  6. string userName = Application["user"].ToString();
  7. string[] users = userName.Split(',');
  8. DropDownList1.DataSource = users;
  9. DropDownList1.DataBind();
  10. Application.UnLock();
  11. }
  12. protected void Button1_Click(object sender, EventArgs e)
  13. {
  14. Application.Lock();
  15. int current = int.Parse(Application["current"].ToString());
  16. string liaotian = Session["user"] + "对" + DropDownList1.SelectedValue.ToString() + "说:" + TextBox1.Text.Trim() + DateTime.Now.ToString();
  17. if (current == 0 || current > 40)
  18. {
  19. current = 0;
  20. Application["chats"] = liaotian;
  21. }else{
  22. Application["chats"] +=","+ liaotian;
  23. }
  24. current += 1;
  25. Application["current"] = (object)current;
  26. Application.UnLock();
  27. }
  28. }
5.main.aspx页面:用于组合前面3个页面,使用iframe
主要代码
  1. <div>
  2. <iframe id="ifraLeft" name="ifraLeft" src="Left.aspx"
  3. style="width:200px;height:500px;float:left;margin-left:10px;margin-top:10px;background-color:grey;border:2px solid #000000"></iframe>
  4. <iframe id="ifraRight" name="ifraRight" src="Right.aspx"
  5. style="width:700px;height:500px;float:left;margin-top:10px;background-color:#000000;border:2px solid #000000;"></iframe>
  6. <iframe id="ifrabottom" name="ifrabottom" src="bottom.aspx"
  7. style="width:900px;height:50px;margin-left:10px;margin-top:10px;background-color:red;border:2px solid #000000;"></iframe>
  8. </div>

案例代码下载

C#实例之简单聊天室(状态管理)的更多相关文章

  1. java web利用mvc结构实现简单聊天室功能

    简单聊天室采用各种内部对象不适用数据库实现. 一个聊天室要实现的基本功能是:         1.用户登录进入聊天室, 2.用户发言 3.用户可以看见别人发言 刚才算是简单的需求分析了,现在就应该是进 ...

  2. 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。

    基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍.最后我们将会实现一个基于S ...

  3. Python Socket 简单聊天室2

    上篇文章写了一个简单的单线程的一问一答的简单聊天室.这次我们使用SocketServer模块搭建一个多线程异步的聊天室. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  4. Asp.Net SignalR - 简单聊天室实现

    简单聊天室 使用持久链接类我们就可以做一些即时通讯的应用了,我使用Group做了一个简单的聊天室,先上图技术细节下面再讲 可以加入聊天室.创建聊天室.发送消息,下面就说说我是如何通过Group做出来的 ...

  5. SpringBoot 搭建简单聊天室

    SpringBoot 搭建简单聊天室(queue 点对点) 1.引用 SpringBoot 搭建 WebSocket 链接 https://www.cnblogs.com/yi1036943655/p ...

  6. ASP.NET SingalR + MongoDB 实现简单聊天室(一):搭建基本框架

    ASP.NET SingalR不多介绍.让我介绍不如看官网,我这里就是直接上源代码,当然代码还是写的比较简单的,考虑的也少,希望各位技友多多提意见. 先简单介绍聊天室功能: 用户加入聊天室,自动给用户 ...

  7. 利用socket.io+nodejs打造简单聊天室

    代码地址如下:http://www.demodashi.com/demo/11579.html 界面展示: 首先展示demo的结果界面,只是简单消息的发送和接收,包括发送文字和发送图片. ws说明: ...

  8. C++ socket 网络编程 简单聊天室

    操作系统里的进程通讯方式有6种:(有名/匿名)管道.信号.消息队列.信号量.内存(最快).套接字(最常用),这里我们来介绍用socket来实现进程通讯. 1.简单实现一个单向发送与接收 这是套接字的工 ...

  9. C#基于Socket的简单聊天室实践

    序:实现一个基于Socket的简易的聊天室,实现的思路如下: 程序的结构:多个客户端+一个服务端,客户端都是向服务端发送消息,然后服务端转发给所有的客户端,这样形成一个简单的聊天室功能. 实现的细节: ...

随机推荐

  1. 基于 HTML5 WebGL 的智慧楼宇可视化系统

    前言 可视化的智慧楼宇在 21 世纪是有急迫需求的,中国被世界称为"基建狂魔",全球高层建筑数量位居首位,所以对于楼宇的监控是必不可少.智慧楼宇可视化系统更多突出的是管理方面的功能 ...

  2. html标签学习入门 随笔

    Html学习入门    随笔1: HTML 标题 HTML 标题(Heading)是通过 <h1> - <h6> 等标签进行定义的. 标题仅用于标题文本  不应该被使用在加粗字 ...

  3. JavaScript 构造函数的继承

    JavaScript 构造函数的继承 在上一篇文章中讲述了 JS 对象.构造函数以及原型模式,这篇文章来讨论下 JavaScript 的继承 继承是 OO 语言中的一个最为人津津乐道的概念.许多 OO ...

  4. C#实现读取IPv6 UDP Socket数据,再发送出去

    C#实现读取IPv6 UDP Socket数据,再发送出去. 不知为何,黑框点一下就停止刷新了,再点一下,就继续刷新了. using System; using System.Collections. ...

  5. 准备 Python3 和 Python 虚拟环境

    1.安装依赖包 yum -y install wget gcc epel-release git 2.安装 Python3.6 yum -y install python36 python36-dev ...

  6. linux 删除文件 磁盘空间未释放

    具体情况就是:删除了一个超大文件后,发现磁盘空间没有变化 原因:有进程正在使用这个文件,虽然我们从文件系统的目录结构上解除链接(unlink),然而文件是被 打开的(有一个进程正在使用),那么进程将仍 ...

  7. php-fpm.conf.default配置文件

    ;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; ; All relative paths in this confi ...

  8. 联合索引在B+树上的存储结构及数据查找方式

    能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! 引言 上一篇文章<MySQL索引那些事>主要讲了MySQL索引的底层原理,且对比了B ...

  9. 剑指offer-面试题66-构建乘积数组-发散思维

    /* 题目: 链接:https://www.nowcoder.com/questionTerminal/94a4d381a68b47b7a8bed86f2975db46 来源:牛客网 给定一个数组A[ ...

  10. css选择器四大类:基本、组合、属性、伪类

    什么是选择器?选择器的作用是通过它可以找到元素,把css样式传递给元素!css选择器主要分为:基本选择器.属性选择器.组合选择器与伪类选择器四个大类! css基本选择器 基本选择器又分为:*通配符.标 ...