asp.net_asp.net mvc - CSDN
asp.net 订阅
ASP.NET又称为ASP+,不仅仅是ASP的简单升级,而是微软公司推出的新一代脚本语言。ASP.NET基于.NET Framework的Web开发平台,不但吸收了ASP以前版本的最大优点并参照Java、VB语言的开发优势加入了许多新的特色,同时也修正了以前的ASP版本的运行错误。 [1-2]  ASP.NET具备开发网站应用程序的一切解决方案,包括验证、缓存、状态管理、调试和部署等全部功能。在代码撰写方面特色是将页面逻辑和业务逻辑分开,它分离程序代码与显示的内容,让丰富多彩的网页更容易撰写。同时使程序代码看起来更洁净、更简单。 [2-3] 展开全文
ASP.NET又称为ASP+,不仅仅是ASP的简单升级,而是微软公司推出的新一代脚本语言。ASP.NET基于.NET Framework的Web开发平台,不但吸收了ASP以前版本的最大优点并参照Java、VB语言的开发优势加入了许多新的特色,同时也修正了以前的ASP版本的运行错误。 [1-2]  ASP.NET具备开发网站应用程序的一切解决方案,包括验证、缓存、状态管理、调试和部署等全部功能。在代码撰写方面特色是将页面逻辑和业务逻辑分开,它分离程序代码与显示的内容,让丰富多彩的网页更容易撰写。同时使程序代码看起来更洁净、更简单。 [2-3]
信息
技术名称
ASP.NET
外文名
ASP.NET
名称简称
.NET
研发公司
微软(Microsoft)
技术全称
Active Server Page .NET
asp.net发展历程
1996年,ASP 1.0(Active Server Pages)版本出现了,它引起了Web开发的新革命,降低了动态网页开发的难度。以前开发动态网页需要编写大量繁杂的C代码,编程效率非常低下,而且需要Web网页开发者掌握非常高的编程技巧。而ASP使用简单的脚本语言,能够将代码直接嵌入HTML,使设计Web页面变得更简单。虽然ASP非常简单,但却能够实现非常强大的功能,这一切得益于其组件。特别是ADO组件,使得在网页中访问数据库易如反掌。这一切推动了动态网页的快速发展与建设,同时使ASP得到迅速流行。1998年,微软公司发布了ASP 2.0,它是作为Windows NT 4 Option Pack的一部分提供的。ASP 2.0与ASP 1.0的主要区别是外部的组件可以初始化,使所有的组件都有了独立的内存空间,并且可以进行事务处理。内置的Microsoft Transaction Server(MTS)使制作组件变得更容易。2000年6月,微软公司宣布了自己的.NET框架。.NET框架的基本思想是:把原有的重点从连接到互联网的单一网站或设备转移到计算机、设备和服务群组上,而将互联网本身作为新一代操作系统的基础。这样,用户将能够控制信息的传送方式、时间和内容,从而得到更多的服务。2001年,ASP.NET浮出水面。它最初的名字为ASP+,后来改为ASP.NET。ASP.NET是微软公司开发的一种建立在.NET之上的Web运行环境,它不是ASP的简单升级,而是新一代的Active Server Pages。ASP.NET是微软公司新体系结构Microsoft.NET的一部分,其中全新的技术架构使编程变得更加简单。借助于ASP.NET,可以创造出内容丰富的、动态的、个性化的Web站点。ASP.NET简单易学、功能强大、应用灵活、扩展性好,可以使用任何.NET兼容语言。 [4-5]  2002年微软发布.NET正式版本.NET Framework 1.0,其中的ASP版本就是ASP.NET 1.0,在此以前发布了两个.NET测试版本Betal和Beta2。2003年微软发布了.NET Frameworrk 1.1正式版,其中ASP版本就是ASP.NET 1.1。2005年微软发布.NET Framework 2.0正式版本,也就是ASP.NET 2.0。 [6] 
收起全文
精华内容
参与话题
  • 本套课程将对基于ASP.NET在线超市进销存系统【成品】的代码部分进行讲解。 该系统能够实现超市商品管理、库存管理、进货管理、损耗管理、销售管理等功能。 系统基于Visual Studio 和SQL Server进行开发,主要...
  • ASP.NET项目大概构造 最近,因为期末作业,于是写了一个ASP.NET项目,很简单,写了几天,感觉还行,于是分享一下。 .NET框架使用的语言有很多,而我的ASP.NET项目用的是C#。实话说,我这是第一次用C#写,感觉和...

    ASP.NET项目大概构造

    最近,因为期末作业,于是写了一个ASP.NET项目,不是很难,用vs2017写的(vs还可以的,挺好用的,特别是前端的路径选择真的是好啊!!!),写了几天,感觉还行,于是分享一下。
    vs2017安装使用:
    https://blog.csdn.net/qq_36556893/article/details/79430133
    .NET框架使用的语言有很多,而我的ASP.NET项目用的是C#。实话说,我这是第一次用C#写,感觉和java差不多。那我现在就简单说一下我的ASP.NET项目如何写的:
    我的页面构造(不好看,有点混乱,现在有点后悔-。-):
    在这里插入图片描述
    在这里插入图片描述

    前端:

    1.页面:和html有点不同:

      <tr>
                            <td style="text-align:center;" class="form-text">
                                用户名:
                            </td>
                            <td class="form-input">
                                <asp:TextBox ID="tbUSerName" runat="server">
                                </asp:TextBox>
                              <asp:RequiredFieldValidator ID="rfvName" runat="server" ControlToValidate="tbUserName" ErrorMessage="用户名不能为空"></asp:RequiredFieldValidator> 
                            </td>
                        </tr>
                        <tr>
                            <td style="text-align:center;" class="form-text">
                                密&nbsp;&nbsp;&nbsp;码:
                            </td>
                             <td>
                                <asp:TextBox ID="tbPassword" runat="server" TextMode="Password">
                                </asp:TextBox>
                                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="tbPassword" ErrorMessage="密码不能为空"></asp:RequiredFieldValidator> 
                            </td>
                        </tr>
                        <tr>
                            <td colspan="2" style="text-align:center;">
                                <asp:Button ID="btLogin" runat="server" OnClick="btLogin_Click" Text="登录" />
                            </td>
                        </tr>
    

    显示效果如下:

    2.css样式:和html差不多,没大有区别

    引入css样式:

    <link rel="stylesheet" href="../css/addcss.css" />
    

    后台:因为我用的是web窗体,所以会自动生成后台:

    在这里插入图片描述
    页面加载时想调用这个方法:Page_Load
    点击事件按钮调用的方法:btLogin_Click(object sender,EventArgs e):可以自动生成

    1.跳转:

     Response.Redirect("FirstPage.aspx");
    

    2.前端弹窗:像js的alert(“”)

     this.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('登陆成功!')</script>");
      return;
    

    3.获取前端页面的值:

    第一种方法:
    前端id.属性

    string strName = tbUSerName.Text;
     string strPwd = tbPassword.Text.Trim();
    

    第二种方法:
    Request[id]

    //下面的包括了单选框,复选框,下拉框,input等
    string id = Guid.NewGuid().ToString("N");//生成uuid:只能用ndbpx
                string name = Request["name"];
                string age = Request["age"];
                // string sex1 = sex.SelectedValue;
                string sex = Request["sex"];
                string phone = Request["phone"];
                string grade = Request["grade"];
                string hobbies = "";
                foreach(ListItem item in hobby.Items)
                {
                    if (item.Selected)
                    {
                        hobbies += item.Value + ",";
                    }
                }
                if (name == "" || age == "" || sex == "" || phone == "" || grade == "" || hobbies == "")
                {
                    this.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('信息填写不完整!')</script>");
                    return;
                }
                string remarks = Request["remarks"] == null ? "" : Request["remarks"];
    

    4.生成UUID:

    string id = Guid.NewGuid().ToString("N");//生成uuid:注意:只能用ndbpx,自行百度
    

    c#生成UUID的方法:https://blog.csdn.net/csj1314520/article/details/53033447

    5.项页面输出内容,使页面显示后台传出的数据

    前台:

    <asp:Label ID="lblMsg" runat="server" Text="" Class="selectd"></asp:Label>
    

    后台:

    lblMsg.Text = "请重新选择";
    

    6.页面之间通信:

    a->b
    a页面后台代码发送:

     Session["id"] = str[0];
                    Session["name"] = str[1];
                    Session["age"] = str[2];
                    Session["sex"] = str[3];
                    Session["phone"] = str[4];
                    Session["grade"] = str[5];
                    Session["hobby"] = str[6];
                    Session["remarks"] = str[7];
                    Response.Redirect("update.aspx");
    

    b页面后台代码接收:

    id = (string)Session["id"];
                name.Text = (string)Session["name"];
                phone.Text = (string)Session["phone"];
                sex.Text = (string)Session["sex"];
                age.Text = (string)Session["age"];
                string grade1 = (string)Session["grade"];
                ListItem item1 = grade.Items.FindByValue(grade1);
                if (item1 != null)
                {
                    item1.Selected = true;
                }
                char c = ',';
                string[] str = ((string)Session["hobby"]).Split(c);
                foreach (string val in str)
                {
                    ListItem item = hobby.Items.FindByValue(val);
                    if (item != null)
                    {
                        item.Selected = true;
                    }
                }
                  remarks.Text = (string)Session["remarks"];
    

    7.连接数据库:ADO.NET操作数据库

    sqlserver数据库下载:
    https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=community&rel=15
    安装教程:https://blog.csdn.net/xyy410874116/article/details/26349465
    修改代码里的MySqlCon,这一步用来连接到数据库,至关重要。

    在“服务器资源管理”处选中数据库,然后可以在“属性”窗口找到“连接字符串”,复制其内容,赋给MySqlCon。比如我修改后是:
    Data Source=MS-20180307VTBY\SQLEXPRESS;Initial Catalog=member;Integrated Security=True
    在这里插入图片描述

    完成这些操作后,就可以在form里写代码来修改数据库了。

    8.与数据库的操作:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data.SqlClient;
    using System.Data;
    namespace WebApplication1.ado
    {
        public class Member
        {
            private string MySqlCon = "Data Source=MS-20180307VTBY\\SQLEXPRESS;Initial Catalog=member;Integrated Security=True";    //在vs中的数据库的详细信息中查找复制
    
            //其实是相当于提供一个可以传参的函数,到时候写一个sql语句,存在string里,传给这个函数,就会自动执行。
            public DataTable ExecuteQuery(string sqlStr)      //用于查询;DataTable
            {
                SqlConnection con = new SqlConnection(@MySqlCon);
                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = sqlStr;
                DataTable dt = new DataTable();
                SqlDataAdapter msda;
                msda = new SqlDataAdapter(cmd);
                msda.Fill(dt);
                con.Close();
                return dt;      //返回查询出的数据表
            }
            public Boolean ExecuteQuery1(string sqlStr)      //用于查询;Boolean
            {
                SqlConnection con = new SqlConnection(@MySqlCon);
                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = sqlStr;
                SqlDataReader dr = cmd.ExecuteReader();
                Boolean b = false;
                if (dr.HasRows)
                {
                    b = true;
                }
                else
                {
                    b = false;
                }
                con.Close();
                return b; //返回boolean表示是否查询出数据
            }
            public string[] ExecuteQuery2(string sqlStr)      //用于查询;string[]
            {
                SqlConnection con = new SqlConnection(@MySqlCon);
                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = sqlStr;
                SqlDataReader dr = cmd.ExecuteReader();
                string[] str = new string[8];
                if (dr.HasRows)
                {
                    dr.Read();
                    dr["sex"].ToString();
                    for(int i = 0; i <= 7; i++)
                    {
                        str[i] = (dr.GetString(i)==null|| dr.GetString(i).Length==0)?"": dr.GetString(i);
                    }
                }
                else
                {
                    
                }
                con.Close();
                return str; 
            }
            public int ExecuteUpdate(string sqlStr)      //用于增删改;
            {
                SqlConnection con = new SqlConnection(@MySqlCon);
                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = sqlStr;
                int iud = 0;
                iud = cmd.ExecuteNonQuery();
                con.Close();
                return iud;    //返回受影响的行数
            }
    
        }
    }
    

    如:
    查询:

    string str = "<table border='1' width='100%'><tr>";
                Member member = new Member();
                string sql = "select * from member";
                DataTable table = member.ExecuteQuery(sql);
                //输出表的列名
                for(int i = 0; i < table.Columns.Count; i++)
                {
                    str = str + "<th colspan=\"2\" style=\"text - align: center; \">" + table.Columns[i].ColumnName + "</th>";
                }
                str = str + "</tr>";
                //输出表的数据
                for(int i = 0; i < table.Rows.Count; i++)
                {
                    DataRow row = table.Rows[i];
                    str = str + "<tr>";
                    for(int j = 0; j < table.Columns.Count; j++)
                    {
                        str = str + "<td colspan=\"2\" style=\"text - align: center; \">" + row[j]+"</td>";
                    }
                    str = str + "</tr>";
                }
                str = str + "</table>";
                lblMsg.Text = str;
    

    详解在:https://blog.csdn.net/kiss__soul/article/details/80316788
    *

    问题解决:

    可能会出现一些问题,如:WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping
    其实就是缺少路径或者运行空间
    详解:https://blog.csdn.net/ayang1986/article/details/45042909
    好了,暂时就先这些吧,其实这asp.net和java的某些框架差不多,如果看不懂的话,我还有完整项目(包括数据库文件,是sqlServer数据库)在“我的资源”里,可以下载,直接能运行,里面注解很清晰。

    项目下载:

    https://download.csdn.net/download/weixin_43075298/10890259

    展开全文
  • ASP.NET WEB介绍

    千次阅读 2019-03-22 14:30:13
    我的ASP.NET 第一讲 ASP.NET 入门 ASP.NET 是动态 网络 语言。那么运行 在服务器中,在这里我们始终离不开浏览器的角色,因此在学习网页开发先了解浏览器: 浏览器的介绍 一.五大浏览器:* 1.浏览器有哪些? ...

    我的ASP.NET 第一讲 ASP.NET 入门
    ASP.NET 是动态 网络 语言。那么运行 在服务器中,在这里我们始终离不开浏览器的角色,因此在学习网页开发先了解浏览器:
    浏览器的介绍
    一.五大浏览器:*
    1.浏览器有哪些?

    							 **Internet Explorer (IE), Trident内核:
    							 FireFox(火狐),  Gecko内核:
    							 Chrome(谷歌)  WebKit内核 和 Blink内核
    							 Opera(欧朋)Presto内核  和 Blink内核
    							 Safari(苹果) WebKit内核 和 Blink内核 13年后的**
    						
    				浏览器的核心就是内核:可大概译为"渲染引擎",不过我们一般习惯将之称为"浏览器内核"
    

    1.2 浏览器内核

    				1.Trident内核:代表产品IE,又称为IE内核。是微软开发的一种排版引擎。使用Trident渲染引擎的浏览器有:IE,遨游,世界之窗浏览器,腾讯TT等等。
    				2.Gecko内核:代表产品Mozilla FirefoxGecko是一套开源的,C++编写的排版引擎。使用它最著名的浏览器有Firefox,Netscape6至9。
    				3.WebKit内核:代表产品有Safari,主要用于Mac OS系统。使用它的浏览器是Safari和谷歌浏览器Chrome。
    				4.Presto内核:代表产品OperaPresto是由Opera Software开发的浏览器排版引擎,它是世界公认最快的渲染速度的引擎。在13年之后,Opera宣布加入谷歌阵营,弃用了。
    				5.Blink内核:由Google和Opera Software开发的浏览器排版引擎,2013年4月发布。现在Chrome和Opera内核是Blink。
    

    ·浏览器介绍完了后,我们就该清楚让同学们清楚,什么是WEB,其实WEB概念很抽象接下来我们来讲述一下吧:
    二. WEB 是什么?

    01.概念:Web它是一种基于 超文本 和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。

    											001.超文本:HTML
    											002.HTTP:通讯协议
    											003.动态交互:比如每天网站信息都时时更新
    											004.跨平台:可以在不同的操作系统上运行
    														00001.平台:平台就是操作系统
    														00002.当下的操作系统:
    																			Windows
    																			Linux
    																			Unix
    																			苹果MAC OS
    																			我们国家的深度
    														
    							是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,
    							其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构, 是运行在互联网上的一种分布式系统。
    

    2.WEB的发展史程

    						Web1.0:开始于1994年,其主要特征是
    							大量使用静态的 HTML 网页来发布信息,
    							只解决了人对信息搜索、聚合的需求,
    							而没有解决人与人之间沟通、互动和参与的需求,
    							所以Web2.0应运而生。
    							传统的门户网站如新浪、搜狐、网易等是Web1.0的代表;
    
    					 Web2.0:始于2004,
    							更加注重交互性,可读可写,
    							体现出的方面是各种微博、相册,用户参与性更强。
    							博客中国、校内网、Facebook、YouTube等是Web2.0的代表;
    							
    					Web3.0:Web3.0是Intnet发展的必然趋势,是Web2.0的进一步发展和延伸。Web3.0在Web 2.0的基础上,
    							将杂乱的微内容进行最小单位的继续拆分,
    							同时进行词义标准化、结构化,实现微信息之间的互动和微内容间基于语义的链接;
    							提供更个性化、精准化搜索等人工智能服务、数据的自由整合与有效聚合、
    							适合多种终端平台等特点。
    							iGoogle、阔地网络等是Web3.0的代表。
    					
    

    3.Web资源包括静态、动态两种:

    								静态web资源:
    									指静态HTML页面的集合,页面中浏览的    数据始终是不变,
    									如早期的静态网站, Web页面中的内容无法动态更新,无法实现和用户的交互。
    									
    								动态web资源:
    									指web页面中浏览的数据是由服务器程序产生的,
    									动态WEB具有交互性,WEB的页面的内容可以动态更新。
    	002. 
    B/S:browser/server  浏览器/服务器模式
    		举例:京东商城
    C/S:client/server      客户端/浏览器模式
    
    
    两者的比较:  
    

    三、什么是CS和BS结构?

    		  1.C/S又称Client/Server或客户/服务器模式。
    						服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQLServer。
    						客户端需要安装专用的客户端软件。
    
    		2.B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,
    					服务器安装Oracle、Sybase、Informix或SQL Server等数据库。浏览器通过Web Server 同数据库进行数据交互。
    					
    		3.局域网和广域网
    				 Client/Server是建立在局域网的基础上的。
    							一个学校 、工厂、一个部门、一个机关
    				 Browser/Server是建立在广域网的基础上的.
    						 跨越物理范围比较大,几公里 几十公里 、几千公里、几大洲等等
    	 
    
    		4.硬件环境不同:
    					C/S 一般建立在专用的网络上, 小范围里的网络环境, 
    								局域网之间再通过专门服务器提供连接和数据交换服务.
    					B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行
    
    		5.对安全要求不同
    					C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强.一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.
    					B/S 建立在广域网之上, 对安全的控制能力相对弱, 面向是不可知的用户群.
    
    		6.对程序架构不同
    				C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.
    				B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 
    				从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟.
    
    		7.软件重用不同
    				C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.
    				B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子
    
    		8.系统维护不同
    		系统维护是软件生存周期中,开销大, -------重要
    					C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级.升级难. 可能是再做一个全新的系统
    					B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.
    
    		9.处理问题不同
    				C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统。
    				B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小
    
    		二、CS和BS结构各自的优、缺点
    		1.C/S的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。
    				缺点主要有以下几个:
    								只适用于局域网。       而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。
    								客户端需要安装专用的客户端软件。首先涉及到安装的工作量,
    								其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。
    								特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。
    								系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。
    								对客户端的操作系统一般也会有限制。可能适应于Win98, 但不能用于Win2000或WindowsXP。或者不适用于微软新的操作系统等等,更不用说Linux、Unix等。
    
    		2.B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。
    							只要有一台能上网的电脑就能使用,客户端零维护。
    							系统的扩展非常容易,只要能上网,再由系统管理员分配一个用户名和密码,就可以使用了。
    							甚至可以在线申请,通过公司内部的安全认证(如CA证书)后,不需要人的参与,系统可以自动分配给用户一个账号进入系统。
    							
    				
    		3、动态网页技术
    							1,"交互性"即网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后WEB发展的大势所趋.
    							2,"自动更新"即无须手动地更新HTML文档,便会自动生成新的页面,可以大大节省工作量.
    							3,"因时因人而变",即当不同的时间,不同的人访问同一网址时会产生不同的页面。
    

    四、URL(Uniform Resource Locator)

    1.统一资源定位符,

    		用于完整地描述Internet上网页和其他资源的地址的一种标识方法。
    

    2.示例:
    http://www.baidu.com:8080/course/java.html

    		    	  协议http
    
    			www   万维网服务
    
    			baidu.com   服务器域名
    
    			8080 端口 门牌号
    
    			Course  服务器的子目录
    
    			  Java.html   具体的文件
    				
    		总结的规律:组成:协议+服务器地址(端口)+具体资源路径
    
    Web应用需要安装web服务器,然后再在Web服务器中部署相应的web资源,供用户使用浏览器访问:
    

    五、常用Web服务器:

    				IIS:Windows产品自带的一种免费的Web服务器,安装配置简单,主要解析的是ASP程序代码。
    	
    				Apache:免费开源的Web服务器软件,它以跨平台、高效和稳定而闻名,是最流行的Web服务器端软件之一。
    	
    				Tomcat 服务器:Apache开源项目中的一个子项目,是一个小型、轻量级的支持JSP和Servlet 技术的Web应用服务器。
    	
    				Nginx :Nginx 服务器是一个高性能的 Web 和反向代理服务器。
    	
    				Nginx 在激烈的 Web 服务器竞争中依旧保持良好的发展势头,一度成为 Web 服务器市场的后起之秀。
    	
    				其它商业化的专业服务器:
    							WebSphere,IBM公司的产品。
    							WebLogic ,BEA公司的产品。
    

    六 、讲完HTTP协议

    (1)HTTP简介

    		1.HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
    		
    		2.HTTP协议作为TCP/IP模型中应用层的协议也不例外。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图:
    		![在这里插入图片描述](https://img-blog.csdnimg.cn/2019032213525230.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L015TG92ZUxpeWFuZw==,size_16,color_FFFFFF,t_70)
    		3.HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
    		
    		4.HTTP默认的端口号为80,HTTPS的端口号为443。
    		
    		5.浏览网页是HTTP的主要应用,但是这并不代表HTTP就只能应用于网页的浏览。HTTP是一种协议,只要通信的双方都遵守这个协议,HTTP就能有用武之地。比如咱们常用的QQ,迅雷这些软件,都会使用HTTP协议(还包括其他的协议)。
    

    (2).HTTP特点

    1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
    
    2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
    
    3、HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。
    
    4、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
    
    5、支持B/S及C/S模式。
    

    (3)HTTP的工作流程

    一次HTTP操作称为一个事务,其工作过程可分为四步:
    1.首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
    2.建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
    3.服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
    4.客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
      如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。
    

    (4).HTTP之请求消息Request

    					客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
    					请求行、请求头部、空行和请求数据四个部分组成。
    			(1)Get请求例子
    			![在这里插入图片描述](https://img-blog.csdnimg.cn/20190322140029531.jpg)
    			第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本.
    			GET说明请求类型为GET,[/562f25980001b1b106000338.jpg]为要访问的资源,该行的最后一部分说明使用的是HTTP1.1版本。
    			
    			第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息
    			从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等
    			
    			第三部分:空行,请求头部后面的空行是必须的
    			即使第四部分的请求数据为空,也必须有空行。
    			
    			第四部分:请求数据也叫主体,可以添加任意的其他数据。
    			这个例子的请求数据为空。
    

    (5)、POST请求例子

    		![在这里插入图片描述](https://img-blog.csdnimg.cn/20190322140359586.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L015TG92ZUxpeWFuZw==,size_16,color_FFFFFF,t_70)
    		第一部分:请求行,第一行明了是post请求,以及http1.1版本。
    		第二部分:请求头部,第二行至第六行。
    		第三部分:空行,第七行的空行。
    		第四部分:请求数据,第八行。
    

    五.HTTP之响应消息Response

    	一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。
    	
    	HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
    	![在这里插入图片描述](https://img-blog.csdnimg.cn/20190322140601761.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L015TG92ZUxpeWFuZw==,size_16,color_FFFFFF,t_70)
    	第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
    	第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
    	
    	第二部分:消息报头,用来说明客户端要使用的一些附加信息
    	第二行和第三行和第四行为消息报头,
    	Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是ISO-8859-1
    	
    	第三部分:空行,消息报头后面的空行是必须的
    	第四部分:响应正文,服务器返回给客户端的文本信息。
    	空行后面的html部分为响应正文。
    

    (6).HTTP之状态码

    		状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
    		1xx:指示信息--表示请求已接收,继续处理
    		2xx:成功--表示请求已被成功接收、理解、接受
    		3xx:重定向--要完成请求必须进行更进一步的操作
    		4xx:客户端错误--请求有语法错误或请求无法实现
    		5xx:服务器端错误--服务器未能实现合法的请求
    
    	常见状态码:
    	![在这里插入图片描述](https://img-blog.csdnimg.cn/20190322140826919.jpg)
    

    (7).HTTP请求方法

    	根据HTTP标准,HTTP请求可以使用多种请求方法。
    	HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
    	HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
    	![在这里插入图片描述](https://img-blog.csdnimg.cn/20190322141001849.jpg)
    

    (8).HTTP工作原理
    HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
    以下是 HTTP 请求/响应的步骤:

    1、客户端连接到Web服务器
    一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。
    2、发送HTTP请求
    通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
    3、服务器接受请求并返回HTTP响应
    Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
    4、释放连接TCP连接
    若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
    5、客户端浏览器解析HTML内容
    客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
    

    (9).GET和POST的区别

         1、GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
         2、GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
         3、GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
         4、GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
    

    项目案例1:
    在这里插入图片描述
    在Form表单,我们的内容,其次的话第一行是ASP.NET类似,界面是ch1.aspx窗体,ch1.aspx.cs是逻辑代码,那么里面的结构如下:在这里插入图片描述
    案列2:业内传值:
    在这里插入图片描述
    在这里插入图片描述
    案例3模拟登陆

    在这里插入图片描述
    在这里插入图片描述
    谢谢观赏!

    展开全文
  • Asp.net学生信息管理系统源码

    千次下载 热门讨论 2020-07-30 23:33:06
    Asp.net学生信息管理系统源码(绝对开源!包含完整的CS文件和数据库文件) <br> 该系统是一个集成多功能的信息管理系统,有教师资料管理、学生管理、班级管理、专业管理、课程管理、成绩管理和院系管理功能模块。...
  • ASP.NET WEB网站简单入门(简单Demo ->发布)

    万次阅读 多人点赞 2018-07-01 14:50:21
    简单分几个阶段 一、简单代码实现 1.新建工程 2.打开设计器(查看设计器),托出一个label ,写上Hello 3.点击调试,即可看到网页效果 4.重新生成后,发布到指定路径下 5.弹出网站发布设置面板,点击&...

    简单分几个阶段

    一、简单代码实现

    1.新建工程
    这里写图片描述

    2.打开设计器(查看设计器),托出一个label ,写上Hello
    这里写图片描述

    3.点击调试,即可看到网页效果
    这里写图片描述

    4.重新生成后,发布到指定路径下
    这里写图片描述

    5.弹出网站发布设置面板,点击<新建..>,创建新的发布配置文件:
    这里写图片描述

    6.输入你自己定义的配置文件名:
    这里写图片描述
    7.点击下一步:在发布方法中选“文件系统”,这样我们可以发布到自己指定的本机文件上。
    这里写图片描述
    8.选择自己指定的文件夹:通过点击下图中右上角红色箭头处创建新的文件夹,自定义命名(我的就写WebSite)。点击打开,进入下一步
    这里写图片描述
    9.在配置中,要选择“Release”——发布模式(Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序)
    这里写图片描述
    10.点击发布即可以发布你指定的文件夹中,这里,我发布的是E盘下的WebSite文件夹中。
    这里写图片描述

    二、IIS简单安装

    1.打开“控制面板”—>选择“程序”。
    这里写图片描述
    2.在弹出对话框中选择“启用或关闭Windows功能”。
    这里写图片描述
    3.在弹出对话框中,选择“Internet Information Services”(如果初学者,建议全部选择,对于老手,按需选择),点击“确定”。
    这里写图片描述
    4.运用程序更改结束后,选择“立即重新启动”。系统重新启动后,则IIS配置结束。
    5.测试:打开网页输入:http://localhost
    这里写图片描述

    三、IIS发布网站

    1.通过》控制面板》管理工具》启动 ‘Internet信息服务(IIS)管理器’ 进入IIS界面。
    右键单击网站》添加网站
    这里写图片描述

    2.下面图中,左边红色方框内输入自定义的网站名称(请尽量用英文,这里我就写MyPhotoSite),右边红色箭头处需要点击 ‘选择(E)…’ 进行更改。
    这里写图片描述
    3.大家可以点开下拉列表框根据自己的网站版本进行选择(一般请选择 不带有Classic的)。这里我选择的是选择DefaultAppPool,
    这里写图片描述
    4.点击下拉列表选择 “自己当前的IP地址”,这里使用默认地址,localhost
    这里写图片描述
    5.点击确定:这时我们的网站就还差一步就发布好了,点击网站MyPhotosSite,再点击下图红色箭头处 切换到 “内容视图”。
    这里写图片描述
    6.最后一步:注册IIS服务器。命令:aspnet_regiis -i(请复制),先在程序菜单》VS2013里面》Visual Studio Tools》VS2013开发人员命令提示。右键单击 “VS2013开发人员命令提示”。以管理员身份运行。(如果不是以管理员身份运行,将会提示“权限不足”错误)
    这里写图片描述
    这里写图片描述
    7.运行后,右键粘贴 aspnet_regiis -i 按回车。
    这里写图片描述
    8.发布成功,输入地址测试一下
    这里写图片描述

    展开全文
  • asp.net 实现用户登录和注册——基于webform模式

    万次阅读 多人点赞 2019-03-17 12:06:45
    最近在写asp课程设计,网站登录注册的功能怎么能少,捣鼓了两天终于弄出点东西来了。 环境:Windows10 + VS2015 + 自带LocalDB 看一下效果: 1、注册页面: 如果用户重名: 2、登录页: 3、注册或者...

        最近在写asp课程设计,网站登录注册的功能怎么能少,捣鼓了两天终于弄出点东西来了。

        环境:Windows10 + VS2015 + 自带LocalDB

        看一下效果:

        1、注册页面:

    如果用户重名:

     

    2、登录页:

     

    3、注册或者登录好了会跳到Home页面并且显示当前的用户

     

    下面看看关键代码:

    ①注册前台页面Register.aspx:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Register.aspx.cs" Inherits="Album.OnlineAlbum.Register" %>
    
    <!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>
            	form{
      
       
        color:#575454;  
        width:500px;
        margin:20px auto;
        font-size:15px;
    	}
    .label{
        color:red;
        font-size:12px;
        font-family:'Lucida Console';
    }
           
    input.Tb{
        border-radius:5px;
    
    }
    
         .user_name{ width:240px; height:38px; line-height:38px; border:1px solid #000; background:url(login_img_03.png)  no-repeat left center; padding-left:30px; }  
    .user_name input{ width:230px; height:36px; border:1px solid #fff;color:#666;}  
    .password{ width:240px; height:38px; line-height:38px; border:1px solid #dfe1e8; background:url(login_img_09.png)  no-repeat left center; padding-left:30px; }  
    .password input{ width:230px; height:36px; border:1px solid #000;color:#666;}  
    .transButton {
        border:solid 1px;
        background-color:transparent;
    }
    #btnRegister{
      
        font-size:14px;
    }
    #linkToLogin{
        text-decoration:none
    }
    #ckItem{
        text-decoration:none
    }
    body{
           background-image:url("rbg.jpg");
    }
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
        
                    <h2>欢迎注册OA</h2>
          
                    <h3>每一天,记录美。</h3>
           
                    
           
                    <br />
    
           <asp:ScriptManager ID="ScriptManager1" runat="server">
                   </asp:ScriptManager> 
           
         
               <asp:TextBox runat="server" ID="rUserNameText"   Height="40px" Width="490px" CssClass="Tb"></asp:TextBox>
    
                   <br />  
               <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                 <ContentTemplate>
                      <asp:CustomValidator ID="CustomValidator1" runat="server" 
        ControlToValidate="rUserNameText" ErrorMessage="*" 
        onservervalidate="CustomValidator1_ServerValidate">
    </asp:CustomValidator>
                 </ContentTemplate>
               
                 </asp:UpdatePanel>
                    <br />
                <asp:TextBox runat="server" ID="rPsdText"  TextMode="Password" Height="40px" Width="490px" CssClass="Tb"></asp:TextBox>
                <br /> 
             <asp:UpdatePanel ID="UpdatePanel2" runat="server">
                 <ContentTemplate>
     <asp:CustomValidator ID="CustomValidator2" runat="server" 
        ControlToValidate="rPsdText" ErrorMessage="*" 
        onservervalidate="CustomValidator2_ServerValidate">
    </asp:CustomValidator>
                 </ContentTemplate>
               
                 </asp:UpdatePanel>
                <br />
               <asp:TextBox runat="server" ID="rrPsdText"  TextMode="Password" Height="40px" Width="490px" CssClass="Tb" ></asp:TextBox>
               <br />
          <asp:UpdatePanel ID="UpdatePanel3" runat="server">
                 <ContentTemplate>
           <asp:CustomValidator ID="CustomValidator3" runat="server" 
        ControlToValidate="rrPsdText" ErrorMessage="*" 
        onservervalidate="CustomValidator3_ServerValidate">
    </asp:CustomValidator>
                 </ContentTemplate>
               
                 </asp:UpdatePanel>
               
             <br />
             <table>
                <tr>
                    <td>
                        <asp:CheckBox ID="CheckBox1" runat="server" Checked="true" />
                    </td>
                    <td>
                         <span>同意</span>  <asp:LinkButton runat="server" Text="服务条款" ID="ckItem"></asp:LinkButton>
                    </td>
                    <td>
                                               
                                               
                               
                    </td>
                    <td>
                      
                        <asp:LinkButton ID="linkToLogin" runat="server" Text="已有账号?登录" OnClick="linkToLogin_Click"></asp:LinkButton>
                    </td>
                </tr>
            </table>
            
               
          
    
           
    
            <asp:Button ID="btnRegister" runat="server" CssClass="transButton" Height="49px" Text="注    册" Width="500px" OnClick="btnRegister_Click" />
                     
        
        </form>
        </body>
            <script type="text/javascript">  
            function watermark(id, value) {  
                var obj = document.getElementById(id);
                var isPsdMode = false;
                if (obj.type == "password")
                {
                    obj.type = "text";
                    isPsdMode = true;
                }
                obj.value = value;  
                obj.style.color = "Gray";
                //获取焦点事件  
                obj.onfocus = function () {
                    
                    obj.style.color = "Black";
                    if (isPsdMode)
                    {
                        obj.type = "password";
                    }
                    if (this.value == value) {  
                        this.value = '';  
                    }  
                };  
                //失去焦点事件  
                obj.onblur = function () {  
                    if (this.value == "") {
                        if (isPsdMode) {
                            obj.type = "text";
                        }
                        this.value = value;  
                        obj.style.color = "Gray";
                    }  
                    else {  
                        obj.style.color = "Black";
                    }  
                };  
            }  
            window.onload = function () {  
                var arr = [{ 'id': 'rUserNameText', 'desc': '用户名' }, { 'id': 'rPsdText', 'desc': '密码' },{ 'id': 'rrPsdText', 'desc': '确认密码' }];
                for (var i = 0; i < arr.length; i++) {  
                    watermark(arr[i].id, arr[i].desc);  
                }  
            };  
        </script> 
    </html>
    

     

      注册后台页面Register.aspx.cs:

     

    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    
    namespace Album.OnlineAlbum
    {
        public partial class Register : System.Web.UI.Page
        {
            private bool UserNameIselgal = false;
            private bool PsdIselgal = false;
            private bool CanRegister = false;
    
            protected void Page_Load(object sender, EventArgs e)
            {
                
            }
    
    
            protected void linkToLogin_Click(object sender, EventArgs e)
            {
                Response.Redirect("Login.aspx");
            }
    
            protected void btnRegister_Click(object sender, EventArgs e)
            {
                Session["User"] = rUserNameText.Text;
                Session["Psd"] = rPsdText.Text;
    
                string connStr = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True";
                SqlConnection conn = new SqlConnection(connStr);
    
              
                try
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand("select count(*) from UserTable where UId=@UId", conn);
                    cmd.Parameters.Add("@UId", SqlDbType.Char);
                    cmd.Parameters[0].Value = Session["User"];
                    int count = (int)cmd.ExecuteScalar();
    
                    if (count > 0)
                    {
    
                        Response.Write("<script>alert('用户名已存在!')</script>");
                    }
                    else
                    {
                       
                        CanRegister = true;
                    }
                }
                catch
                {
                    Response.Write("检测重名异常");
                }
    
                finally
                {
                    conn.Close();
                }
    
                if (CanRegister)
                {
                    try
                    {
                        conn.Open();
                        string strIns = "insert into  UserTable(UId, Psd) values(@UId, @Psd)";
                        SqlCommand cmd = new SqlCommand(strIns, conn);
                        cmd.Parameters.Add("@UId", SqlDbType.NChar);
                        cmd.Parameters.Add("@Psd", SqlDbType.NChar);
    
                        cmd.Parameters["@UId"].Value = Session["User"];
                        cmd.Parameters["@Psd"].Value = Session["Psd"];
    
                        cmd.ExecuteNonQuery();
                    }
                    catch
                    {
                        Response.Write("注册异常");
                    }
                    finally
                    {
                        conn.Close();
    
                    }
                }
                CanRegister = CanRegister && UserNameIselgal && PsdIselgal;
                if (CanRegister)
                {
                    Session["CurrentUser"] = rUserNameText.Text;
                    Response.Redirect("Home.aspx");
                }
              
            }
    
            protected void CustomValidator1_ServerValidate(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
            {
                if (rUserNameText.Text.Equals("用户名"))
                {
                    CustomValidator1.ErrorMessage = "*用户名为空";
                    args.IsValid = false;
                } else if (System.Text.RegularExpressions.Regex.IsMatch(rUserNameText.Text, "^[0-9a-zA-Z]+$") &&
                        rUserNameText.Text.Length > 5 && rUserNameText.Text.Length < 11)
                        {
                        args.IsValid = true;
                        UserNameIselgal = true;
                        }
                     else
                    {
                    CustomValidator1.ErrorMessage = "*用户名由6~10位数字和字母构成";
                    args.IsValid = false;
                     }
    
              
            }
    
            protected void CustomValidator2_ServerValidate(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
            {
                if (rPsdText.Text.Equals("密码"))
                {
                    CustomValidator2.ErrorMessage = "*密码为空";
                    args.IsValid = false;
                }
    
                else if (System.Text.RegularExpressions.Regex.IsMatch(rPsdText.Text, "^[0-9a-zA-Z]+$") &&
                  rPsdText.Text.Length > 4)
               {
                    args.IsValid = true;
                }
                else
                {
                    CustomValidator2.ErrorMessage = "*密码由全数字和字母构成且不少于5位";
                    args.IsValid = false;
                }
            }
    
            protected void CustomValidator3_ServerValidate(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
            {
                if (rrPsdText.Text.Equals("") ||rrPsdText.Text.Equals("确认密码"))
                {
                    args.IsValid = false;
                    CustomValidator3.ErrorMessage = "*确认密码为空";
                }
                else if (!rrPsdText.Text.Equals(rPsdText.Text))
                {
                    args.IsValid = false;
                    CustomValidator3.ErrorMessage = "*两次密码不一致";
                }
                else
                {
                    PsdIselgal = true;
                    args.IsValid = true;
                }
            }
        }
    }

        ②登录前台页面Login.aspx:

        

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="Album.OnlineAlbum.Login" %>
    
    <!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>
            	form{
      
       
        color:#575454;  
        width:500px;
        margin: auto;
        font-size:15px;
        margin-top:260px;
    	}
       #spanpsd{
           margin-left:125px;
       }
       #spanuser{
           margin-left:110px;
       }
       div{
           margin:30px auto;
           align-content:center;
       } 
       .textbox{
           border:solid 1px;
           background:rgba(0, 0, 0, 0);
       }
       #LinkButton1{
           text-decoration:none;
           color:lightblue;
            margin-left:230px;
           
       }
       #Button1{
           border-radius:2px;
           border:solid 1px;
        background-color:transparent;
        margin-left:150px;
         margin-top:10px;
       }
      body{
                background-image: url("lbg.jpg");
            }
      
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <div>
                    <span id="spanuser">用户名:</span>
                    <asp:TextBox ID="TextBox1" runat="server" CssClass="textbox" Height="30px" Width="240px"></asp:TextBox>
                </div>
    
                <div>
                    <span id="spanpsd">密码:</span>
                    <asp:TextBox ID="TextBox2" runat="server" CssClass="textbox" Height="30px" Width="240px" TextMode="Password"></asp:TextBox>
                </div>
    
                <div>
                    <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">没有账号?注册</asp:LinkButton>
                    <br />
                    <asp:Button ID="Button1" runat="server" Text="登 录" Width="270px" Height="40px" OnClick="Button1_Click" />
                </div>
            </div>
               
        </form>
    </body>
    </html>
    

        登录后台页面Login.aspx.cs:

        

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace Album.OnlineAlbum
    {
        public partial class Login : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
               
            }
    
           
    
            protected void LinkButton1_Click(object sender, EventArgs e)
            {
                Response.Redirect("Register.aspx");
            }
    
            protected void Button1_Click(object sender, EventArgs e)
            {
                string connStr = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True";
                SqlConnection conn = new SqlConnection(connStr);
    
                try
                {
    
    
                    conn.Open();
                    SqlCommand cmd = new SqlCommand("select count(*) from UserTable where UId=@UId and Psd=@Psd", conn);
                    cmd.Parameters.Add("@UId", SqlDbType.Char);
                    cmd.Parameters.Add("@Psd", SqlDbType.Char);
                    cmd.Parameters[0].Value = TextBox1.Text;
                    cmd.Parameters[1].Value = TextBox2.Text;
                    int count = (int)cmd.ExecuteScalar();
                    if (count == 1)
                    {
    
                        Session["CurrentUser"] = TextBox1.Text;
                        Response.Redirect("./Home.aspx");
    
    
                    }
                    else
                    {
                        Response.Write("<script>alert('用户名或密码错误')</script>");
                    }
                }
                catch
                {
                    Response.Write("<script>alert('登录异常')</script>");
                }
    
                finally
                {
                    conn.Close();
                }
    
            }
        }
    }

        ③Home.aspx:

        

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Home.aspx.cs" Inherits="Album.OnlineAlbum.Home" %>
    
    <!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>Online Ablum</title>
        <style>
            #page_header{
               height:20px;
               margin-left:10px;
            }
        </style>
    </head>
    <body>
       
        
    
            <form runat="server">
               
              
                 <asp:LinkButton runat="server" OnClick="Unnamed2_Click" ID="btnToReg">注册</asp:LinkButton>
              
             <asp:LinkButton runat="server" OnClick="Unnamed1_Click" ID="btnToLog">登录</asp:LinkButton>
              
            </form>
             
       
     </body>
    </html>
    

        home.aspx.cs:

        

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace Album.OnlineAlbum
    {
        public partial class Home : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (Session["CurrentUser"] != null)
                    btnToReg.Text = Session["CurrentUser"].ToString();
            }
    
            protected void Unnamed1_Click(object sender, EventArgs e)
            {
                Response.Redirect("Login.aspx");
            }
    
            protected void Unnamed2_Click(object sender, EventArgs e)
            {
                Response.Redirect("Register.aspx");
            }
        }
    }    

       Web.config:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
      有关如何配置 ASP.NET 应用程序的详细信息,请访问
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
    <configuration>
    
      
    <connectionStrings>
        <add name="ConnectionString" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
    <appSettings>
        <add key="ValidationSettings:UnobtrusiveValidationMode" value="none"/>
      </appSettings>
      <system.web>
        <compilation debug="true" targetFramework="4.5.2"/>
        <httpRuntime targetFramework="4.5.2"/>
        <httpModules>
          <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/>
        </httpModules>
      </system.web>
      <system.codedom>
        <compilers>
          <compiler language="c#;cs;csharp" extension=".cs"
            type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
            warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
          <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
            type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
            warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
        </compilers>
      </system.codedom>
      <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules>
          <remove name="ApplicationInsightsWebTracking"/>
          <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"
            preCondition="managedHandler"/>
        </modules>
      </system.webServer>
    </configuration>

     

    附上项目代码,需要积分下载。

     ps:这是我一个在线相册系统的一部分,完整项目源码见github,可以不用积分下载,不过你得理清我写的东西。

    展开全文
  • asp.net发布网站的详细步骤

    万次阅读 多人点赞 2017-11-07 16:03:51
    1、用VS2013打开解决方案。   2、选中解决方案,点击鼠标“右键”—>从弹出...3、待第2步“清理解决方案”结束后,选中“解决方案”—>点击鼠标“右键”—>在弹出对话框中,选择“重新生成解决方案”。...
  • 关于ASP.NET和.NET的区别和联系

    千次阅读 2017-11-27 10:42:08
    关于ASP.NET和.NET的区别和联系 对于一个新手,往往会被这些名字给搞蒙了,对不起(笨小孩我也被搞蒙过,见笑啦),这归根结底还是怪自己对知识掌握和了解的不够,废话不多,直接到主题。 ASP.NET和.NET的...
  • ASP.NET和PHP全面对比

    千次阅读 2019-07-13 04:36:00
     刚刚在9月编程语言排行榜上取得历史性突破的PHP在Web开发领域最到的对手可能就是基于微软.NET技术的ASP.NET。近日,微软的Joe Stagner在博客上发表了一系列文章比较了PHP和ASP.NET性能方面的文章,引起了来自双方...
  • ASP.NET MVC 实现WebSocket

    千次阅读 2020-08-10 16:37:03
    ASP.NET实现 服务端 客户端 踩到的坑 有时我们需要由浏览器实时接收消息或者数据,这样的需求使用传统的Ajax轮询浪费资源不说效率还十分低下。而WebSocket技术可以帮助我们轻松解决这些问题。 WebSocket原理 ...
  • 什么是Asp.Net core 我相信很多C# Developer已经对于.net core不算陌生了,就算没有正式使用相信也应该有所了解。微软在推出来.net core的同时为了方便一些原有的项目可以方便迁移,同时推出了Asp.net core。那么...
  • ASP.NET Core跨平台开发实战

    万人学习 2019-08-06 10:53:53
  • ASP.NET、.NET和C#的关系是怎样的?

    万次阅读 2014-05-31 10:46:55
    1、.NET是什么? .Net全称.NET Framework是一个开发和运行环境,该战略是微软的一项全新创意,它将使得“互联网行业进入一个更先进的阶段...C#是.NET Framework框架支持的一种主力开发语言,可用于开发ASP.NET网站,Wind
  • ASP.NET文档管理系统(功能强大且实用)

    万次阅读 多人点赞 2017-12-25 11:33:22
    ASP.NET文档管理系统(功能强大且实用),可以从中学习登录、操作日志,文档上传下载管理,审批流程及管理等等知识。
  • ASP.net 2.0资料吐血收藏(^_^)

    万次阅读 热门讨论 2007-03-15 00:32:00
    asp.net控件开发基础(1) GridView模版列嵌套GirdView显示主从表数据 GridView中添加一个CheckBox列 域环境中安装部署VSTS全过程 设置VSS使支持通过Internet访问 浅析Microsoft .net PetShop程序中的购物车和订单处理...
  • ASP.NET 3.5 企业级开发

    万次阅读 热门讨论 2011-06-21 11:47:00
    议题.NET Framework 3.5 和Visual Studio 2008C# 面向对象程序设计ASP.NET 状态管理和页面传值ASP.NET 中的错误处理ADO.NET与数据访问架构与模式安全与性能 优秀的团队开发管理功能C# 面向对象程序设计封装继承性多...
  • 如何让asp.net执行命令,暂停几秒,再执行下一行命令?(已解决) Thread.Sleep(1000); // 1000为一秒 或者用 System.Threading.Thread.Sleep(1000); //1秒
  • 2011年4月传智播客.Net培训-免费公开课现场视频 【重磅内容】微软移动开发介绍1-早起的鸟儿有食吃.rar 详情 53.2MB 【重磅内容】微软移动开发介绍2-windows.phone.7.(wp7)深入探讨.rar 详
  • string a="china"; string b="i"; if (a.IndexOf(b) > -1) {   }
  • ASP.NET中的控制台输出

    万次阅读 2009-11-29 19:15:00
    以前做.NET winform的时候,一直都是用 Console.Write向控制台输出信息的,这次做web的时候,发现这个语句用不了。查了一下资料,才发现web程序执行时,是被附加到IIS进程的一个单独的AppDomain中的,所以就算有输出...
1 2 3 4 5 ... 20
收藏数 609,363
精华内容 243,745
关键字:

asp.net