asp.net基础学习笔记
原文地址:http://blog.csdn.net/oxoxzhu/article/details/8652530
1.概论 浏览器-服务器 B/S 浏览的
文件扩展名 | 说明 |
.ashx | 一般处理程序,asp.net核心程序,但一般使用.aspx !一般情况下,凡是不需要返回发亮复杂的HTML代码的时候,可以使用它. |
.aspx | 常用程序WebForm,用于创建网页和对网页进行编程的核心文件类型(前台文件),和.aspx.cs文件配套使用 !需要返回大量HTML代码 |
.aspx.cs | 常用程序,用于编写大量的C#页面代码,和.aspx配套使用 |
.ascx | 指明一个asp.net用户定义控件 |
.asax | 包含asp.net应用程序级事件的事件语法 |
.config | 配置文件,用于设置网站应用程序的各种属性 |
.asmx | 供宿主Web服务在本地或远程使用 |
- public void ProcessRequest (HttpContext context) {
- string modelPath = context.Server.MapPath("LoginModel.htm");
- string htmlSendBack = System.IO.File .ReadAllText(modelPath);
- context.Response.ContentType = "text/plain";
- context.Response.Write(htmlSendBack);
- if (!string .IsNullOrEmpty(context.Request.Form[ "txtName"]))
- {
- if (context.Request.Form["txtName" ] == "zhu" &&
- context.Request.Form[ "txtPassword"] == "123" )
- {
- context.Response.Write( "登录成功!" );
- }
- else
- context.Response.Write( "登录失败!" );
- }
- 用户在浏览器地址栏输入:http://localhost:80777/FirstShower.ashx
- 服务器接收到用户的请求,发现是请求.ashx文件,便将请求交给framework执行,fw找到对应的文件first.ashx,执行后将生成的字符串(通常是html+css+javascript格式)返回浏览器
- 浏览器接收到服务器返回的数据,并按照http语法解释执行,以界面的方式展示给用户看到.(此时如果html等代码中包含外部文件,则再次发送单独请求服务器相应文件数据)
- 每一个请求都会要创建 一个HttpWorkerRequest和HttpApplication
- HttpWorkerRequest 里面 放的是 每一个请求报文里的数据
- HttpApplication对象里面放的是 每一个请求要执行的代码
- 为每个请求创建单独的HttpApplication对象, 那么针对此次请求的所有运行过程都在此对象中完成
- 分析请求报文,并将报文数据封装入一个叫做HttpWorkerRequest类对象
- 创建HttpContext对象, 次对象是当前请求的上下文环境,里面包含处理请求的所有参数数据,其中最重要的就是HttpRequest和HttpResponse两个类(方便取值)
- HttpRequest主要包含了所有的请求信息,这些信息来源于HttpWorkRequest对象,对象包含属性:Form(客户连接数据)QueryString(客户端url参数)
- HttpResponse主要包含了一个FileStream对象, 用来保存页面类执行过程中要输出给浏览器的数据
- 通过调用HttpApplicationFectory的类的一个静态方法来创建HttpApplication类对象中对应属性
- 因为在HttpApplication里要运行被请求的页面类对象里的ProcessRequest方法,所以,需要将HttpContext对象传入到HttpApplication中来 ( IHttpHandler hander = 通过反射方式创建被请求的页面类对象 )?
- 在其中第8个事件时,创建 被请求的页面类的对象
- 在11个和12个中间,执行了 被创建的页面类的ProcessRequest方法
系统对象 | ASP.NET |
Page | 指向页面自身的方式.作用于为页面执行期 |
Request | 读取客户端在Web请求期间发送的值(http请求报文数据) |
Response | 封装了页面执行期返回到HTTP客户端的输出(http响应报文数据) |
Application | 作用于整个程序运行期的状态对象 |
Session | 会话期状态保持对象,用于跟踪单一用户的会话 |
Cookie | 客户端保持会话信息的一种方式 |
Server | 提供对服务器上的方法和属性的访问 |
- public void ProcessRequest (HttpContext context) {
- context.Response.ContentType = "text/html";
- System.Text. StringBuilder sbHTML = new System.Text.StringBuilder();
- sbHTML.Append( "<html><head><title>登录页面</title></head><body><form action='03Login.ashx' method='post'>");
- sbHTML.Append( "用户名:<input type='text' name='txtname' /> <br />" );
- sbHTML.Append( "密码:<input type='password' name='txtpwd' /> <br/>" );
- sbHTML.Append( "<input type='submit' value='登录'/><a href='04Reg.ashx?a=222'>注册</a> <br/>");
- sbHTML.Append( "</form></body></html>" );
- context.Response.Write(sbHTML.ToString());
- //获得浏览器表单post方式传递来的值
- string strUserName = context.Request.Form["txtname"];
- if (!string .IsNullOrEmpty(strUserName))
- {
- context.Response.Write( "Form中的值:" + strUserName);
- }
- //获得浏览器表单get方式传递来的值
- string strUserNameGet = context.Request.QueryString["txtname"];
- if (!string .IsNullOrEmpty(strUserNameGet))
- {
- context.Response.Write( "Url中得到的值:" + strUserNameGet);
- }
- }
QueryString属性 | 获取通过Get方式传来的数据 浏览器: 超链接, 和表单method=get |
|
Request | Form属性 | 获取通过Post方式传来的数据 浏览器method=post |
Params属性 | 客户端提交的数据集合 |
Write方法 | 直接在页面上输出内容 | |
Response | Redirect方法 重定向 | 向浏览器发送状态码302(命令浏览器重定向) 并且通过: Location: ..../05Redirect.ashx 告诉浏览器重定向的地址 浏览器,根据重定向地址进行访问 |
End方法 | 结束输出 |
- public void ProcessRequest (HttpContext context) {
- context.Response.ContentType = "text/html";
- string strNum1 = context.Request.Form["txtNum1" ];
- string strNum2 = context.Request.Form["txtNum2" ];
- //判断是否格式正确
- string result = "0" ;
- int num1 = 0, num2 = 0;
- if (!string .IsNullOrEmpty(strNum1) && ! string.IsNullOrEmpty(strNum2))
- {
- if (int .TryParse(strNum1, out num1) && int.TryParse(strNum2, out num2))
- {
- result = (num1+num2).ToString();
- }
- else
- {
- result = "输入格式错误" ;
- }
- }
- System.Text. StringBuilder sbHTML = new System.Text.StringBuilder();
- sbHTML.Append( "<!DOCTYPE><html><head><title>计算器</title></head><body><form action='06Calculate.ashx' method='post'>");
- sbHTML.Append( "<input type='text' name='txtNum1' value='" +
- num1.ToString() + "' /> + <input type='text'name='txtNum2' value='" +
- num2.ToString() + "'/> = <input type='text' readonly='readonly' value='" +
- result.ToString() + "' <br/>");
- sbHTML.Append( "<input type='submit' value='计算'/><br />" );
- sbHTML.Append( "</form></body></html>" );
- context.Response.Write(sbHTML.ToString());
- public void ProcessRequest (HttpContext context) {
- context.Response.ContentType = "text/html";
- string strNum1 = context.Request.Form["txtNum1" ];
- string strNum2 = context.Request.Form["txtNum2" ];
- //判断是否格式正确
- string result = "0" ;
- int num1 = 0, num2 = 0;
- //如果包含隐藏域的话, 才执行相加操作
- if (!string .IsNullOrEmpty(context.Request.Form[ "hidIsPostBack"]))
- {
- if (!string .IsNullOrEmpty(strNum1) && ! string.IsNullOrEmpty(strNum2))
- {
- if (int .TryParse(strNum1, out num1) && int.TryParse(strNum2, out num2))
- {
- result = (num1 + num2).ToString();
- }
- else
- {
- result = "输入格式错误" ;
- }
- }
- }
- System.Text. StringBuilder sbHTML = new System.Text.StringBuilder();
- sbHTML.Append( "<!DOCTYPE><html><head><title>计算器</title></head><body><form action='06Calculate.ashx' method='post'>");
- sbHTML.Append( "<input type='text' name='txtNum1' value='" +
- num1.ToString() + "' /> + <input type='text'name='txtNum2' value='" +
- num2.ToString() + "'/> = <input type='text' readonly='readonly' value='" +
- result.ToString() + "' <br/>");
- sbHTML.Append( "<input type='submit' value='计算'/><br />" );
- sbHTML.Append( "<input type='hidden' name='hidIsPostBack' value='1' /></form></body></html>" );
- context.Response.Write(sbHTML.ToString());
- }
- //---------------------------------类定义--------------------------------------------
- /// <summary>
- ///一个计算器类
- /// </summary>
- public class Class1
- {
- //第一个操作数
- public int num1 { get; set; }
- //第二个操作数
- public int num2 { get; set; }
- //操作符
- public string calculateChar{ get; set; }
- //结果
- public string result { get; set; }
- public Class1()
- {
- }
- /// <summary>
- /// 计算结果
- /// </summary>
- /// <param name="a"> 第一个操作数 </param>
- /// <param name="b"> 第二个操作数 </param>
- /// <param name="oper"> 操作符</param>
- public void GetResult(int a, int b, string oper)
- {
- this.num1 = a;
- this.num2 = b;
- this.calculateChar = oper;
- switch (this .calculateChar)
- {
- case "+" :
- result = (num1 + num2).ToString();
- break;
- case "-" :
- result = (num1 - num2).ToString();
- break;
- case "*" :
- result = (num1 * num2).ToString();
- break;
- case "/" :
- result = (num1 / num2).ToString();
- break;
- }
- }
- }
- //------------------------------------------------------页面类----------------------------------------------------------
- public class _07CalculateFour : IHttpHandler {
- public void ProcessRequest (HttpContext context) {
- context.Response.ContentType = "text/html";
- //实例化一个计算器对象
- Class1 calcu = new Class1();
- string strNum1 = context.Request.Form["txtNum1" ];
- string strNum2 = context.Request.Form["txtNum2" ];
- string strOper = context.Request.Form["optionOper" ];
- int num1 = 0;
- int num2 = 0;
- if (!string .IsNullOrEmpty(context.Request.Form[ "hidIsPostBack"]))
- { //模拟回访
- if (!string .IsNullOrEmpty(strNum1) && ! string.IsNullOrEmpty(strNum2))
- { //判断为空
- if (int .TryParse(strNum1, out num1) && int.TryParse(strNum2, out num2))
- { //判断格式
- calcu.GetResult(num1, num2, strOper);
- }
- else
- {
- calcu.result = "参数格式不正确" ;
- }
- }
- }
- System.Text. StringBuilder sbHTML = new System.Text.StringBuilder();
- sbHTML.Append( "<!DOCTYPE ><html><head></head><body><form action='07CalculateFour.ashx' method='post'>");
- sbHTML.Append( "<input type='text' name='txtNum1' value='" +calcu.num1.ToString()+"'/>");
- sbHTML.Append( "<select name='optionOper'><option value='"+calcu.calculateChar+ "'>"+calcu.calculateChar+"</option><option value='+'>+</option><option value='-'>-</option><option value='*'>*</option><option value='/'>/</option></select>" );
- sbHTML.Append( "<input type='text' name='txtNum2' value='" +calcu.num2.ToString()+"'/> = ");
- sbHTML.Append( "<input type='text' readonly='readonly' name='txtResult' value='" +calcu.result+"'/>");
- sbHTML.Append( "<input type='submit' value='计算'/>" );
- sbHTML.Append( "<input type='hidden' name='hidIsPostBack' value='1'/></form></body></html>" );
- context.Response.Write(sbHTML.ToString());
- }
- 只能为input, textarea, select三种类型的标签, 只有input(文本框/CheckBox等)用户才可以填写值,<label>,<p>,<font>等标签仅提供显示用,没有提交到服务器的必要.
- 只有value属性的值才会提交给服务器, 以input标签为例, input标签有title,type,disabled等属性,但这些属性都是供显示用的,用户不能修改,只有value属性才是用户输入的属性,因此只有value属性的值才会被提交到服务器
- 标签必须设置name属性. 学习Dom的时候我们知道,如果通过Javascript操作标签,必须为标签设定id属性. 如果要将标签的value属性提交到服务器,则必须为标签设定name属性,提交到服务器会以"name=value"的键值对方式提交给服务器,用&隔开,除了单选按钮等少数标签,那么可以重复,其他name都不能重复. name是给服务器用的,id是给dom用的,对于RadioButton,同name的为一组,选中的radiobutton的value被提交到服务器.
- 如果设置了控件的disabled属性的话,浏览器不会把数据交给服务器
- 放到form标签内,只有放到form标签才可能会被提交到服务器,form之外的input等标签被忽略.
- 使用隐藏字段, 模拟IsPostBack, <input type="hidden" name="hidIsPostBack" value="true" />
- 在模版网页中,涉及到修改值得时候, 可以使用占位符, 之后, 直接替换就可以了, 使用{name}的形式即可
- public class _08Cal : IHttpHandler {
- public void ProcessRequest (HttpContext context) {
- context.Response.ContentType = "text/html";
- //--------------------读取html内容模版----------------------
- //根据虚拟路径获得物理路径
- string path = context.Server.MapPath("CalculateModel.htm"); //这里仔细记住
- string strHTML = System.IO.File.ReadAllText(path); //这里也要好好记住
- //------------------获得浏览器提交的内容---------------------------
- string strNum1 = context.Request.Form["txtNum1"];
- string strNum2 = context.Request.Form["txtNum2"];
- int num1 = 0;
- int num2 = 0;
- string result = "";
- if (!string.IsNullOrEmpty(context.Request.Form["hidIsPostBack"]))
- {
- if (!string.IsNullOrEmpty(strNum1) && !string.IsNullOrEmpty(strNum2))
- {
- if (int.TryParse(strNum1, out num1) && int.TryParse(strNum2, out num2))
- {
- result = (num1 + num2).ToString();
- }
- else
- {
- result = "输入格式错误";
- }
- }
- }
- //-------------------------输出html到浏览器------------------------
- //字符串替换,进行赋值
- strHTML = strHTML.Replace("{num1}", num1.ToString()).Replace("{num2}", num2.ToString()).Replace("{result}", result.ToString());
- context.Response.Write(strHTML);
- }
- public bool IsReusable {
- get {
- return false;
- }
- }
- }
- //---------------------------------模版网页显示---------------------------------------
- <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- < html>
- < head>
- < title> 计算器 </title >
- </ head>
- < body>
- < form action ='06Calculate.ashx' method ='post'>
- < input type ='text' name ='txtNum1' value ='{num1}' /> +
- < input type ='text' name ='txtNum2' value ='{num2}' /> =
- < input type ='text' readonly ='readonly' value ='{result}' />< br />
- < input type ='submit' value ='计算' />
- < input type ='hidden' name ='hidIsPostBack' value ='1' />
- </ form>
- </ body>
- </ html>
- http是无状态的, 浏览器每次请求服务器的页面类时,服务器都会创建一个该类的对象,并调用里面的方法执行,最后返回输出结果给浏览器,然后对象销毁断开连接
- 浏览器和服务器都是不认识对方的
asp.net基础学习笔记的更多相关文章
- ASP.Net MVC开发基础学习笔记:一、走向MVC模式
一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...
- ASP.Net MVC开发基础学习笔记(1):走向MVC模式
一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- 路由其实也可以很简单-------Asp.net WebAPI学习笔记(一) ASP.NET WebApi技术从入门到实战演练 C#面向服务WebService从入门到精通 DataTable与List<T>相互转换
路由其实也可以很简单-------Asp.net WebAPI学习笔记(一) MVC也好,WebAPI也好,据我所知,有部分人是因为复杂的路由,而不想去学的.曾经见过一位程序猿,在他MVC程序中, ...
- [ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载、ID型别差异
[ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载.ID型别差异 原始码下载 ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.NET的验证.授 ...
- 【C#编程基础学习笔记】4---Convert类型转换
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...
- 【C#编程基础学习笔记】6---变量的命名
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...
- ASP.NET MVC学习笔记-----Filter2
ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...
- ASP.NET MVC学习笔记-----Filter
ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...
随机推荐
- USB封包格式
1.起始(SOP)封包 根集线器会在每1 ms时,送出SOF封包.这介于2个SOF封包之间的时间,即称为帧(frame).SOF封包虽是属于令牌封包的一种,但却具有独自的PID形态名称SOF.通常目标 ...
- jQuery插件之jqzoom
jqzoom是一款基于jQuery的图片方法插件. 使用方法:1.引入jQuery与jqzoom,jqzoom.css 2.准备两张一大一小大小相同的图片,小图片放在<img>标签的&qu ...
- java代码模拟先入先出,fifo
最近在做一个先入先出的出库.琢磨了一下,写了一个简单的java代码测试: public static void main(String[] args) { LinkedList q = new Lin ...
- sqlite数据库读写在linux下的权限问题
近期在学linux,恰巧有个php项目要做.于是配置好环境打算在linux下做. 无奈站点执行后一片空白.经过调试发现是sqlite数据库的问题. 安装sqlite扩展 apt-get install ...
- 在Hadoop集群上,搭建HBase集群
(1)下载Hbase包,并解压:这里下载的是0.98.4版本,对应的hadoop-1.2.1集群 (2)覆盖相关的包:在这个版本里,Hbase刚好和Hadoop集群完美配合,不需要进行覆盖. 不过这里 ...
- poj 2774 最长公共子--弦hash或后缀数组或后缀自己主动机
http://poj.org/problem?id=2774 我想看看这里的后缀数组:http://blog.csdn.net/u011026968/article/details/22801015 ...
- C++ 实现Trim
一.字符串去空格(没有处理字符串中间的空格) lTrim:除去字符串开头的空格 eg." abc123 " --> "abc123 " ...
- idea maven jetty插件热部署
maven tomcat插件好像无法进行热部署,jetty可以如下配置实现热部署,但是idea无法进行自动编译,所以需要如下快捷键 Ctrl+Shift+F9,编译 Ctrl+F9,生成项目 < ...
- JS判断是不是Decimal类型(正则实现)
备忘: function isDecimal(item) { var obj = $(item); if (obj.length > 0) { if ($(obj).val() != null ...
- <audio> 标签简介
定义和用法 <audio> 标签定义声音,比如音乐或其他音频流. 实例 一段简单的 HTML 5 音频: <audio src="someaudio.wav"&g ...