原文地址:http://blog.csdn.net/oxoxzhu/article/details/8652530

1.概论 浏览器-服务器 B/S 浏览的

     浏览器和服务器之间的交互,形成上网B/S模式
     对于HTML传到服务器  交给服务器软件(IIS)  服务器软件直接读取静态页面代码,然后返回浏览器
     对于ASPX传达服务器  交给服务器软件(IIS)   IIS发现自己处理不了aspx的文件,就去映射表根据后缀名里找到响应的处理程序(isapi,服务器扩展程序) 问题:IIS如何调用可扩展程序? 答:可扩展程序首先就是按照IIS提供的借口实现代码,所以IIS就知道如何调用.
     
2.什么是asp.net
     !asp.net是一种动态网页技术,在服务器端运行.net代码,动态生成HTML,然后响应个浏览器
     *注意,主要的操作都是服务器进行操作,浏览器只是传输指令
     !可以使用JavaScript, Dom在浏览器端完成很多工作,但是有很多工作无法再浏览端完成,比如存储数据,访问数据库没复杂的业务逻辑运算,安全性要求高的逻辑运算等.
     !服务端控件和HTML控件生成关系: 在aspx页面中可以使用服务端控件,简化开放. 但浏览器只认html, 因此在包含服务端控件的页面被请求时,页面中的服务器端控件会组装成对应的HTML控件代码字符串,比如 TextBox : <input type="text" />
     !asp.net:ASHX(一般处理程序) (在服务器上运行最快的) ,WebForm,WVC3 (Model, View, Controler)
     !服务器控件不是新的控件,在浏览器端仍然是生成html标签,服务端控件虽然好用,但是也有缺点,并不是什么地方用服务器端控件都好,具体后面讲.
3.aspx.net里的常用文件(重点)
文件扩展名 说明
.ashx 一般处理程序,asp.net核心程序,但一般使用.aspx
!一般情况下,凡是不需要返回发亮复杂的HTML代码的时候,可以使用它.
.aspx 常用程序WebForm,用于创建网页和对网页进行编程的核心文件类型(前台文件),和.aspx.cs文件配套使用
!需要返回大量HTML代码
.aspx.cs 常用程序,用于编写大量的C#页面代码,和.aspx配套使用
.ascx 指明一个asp.net用户定义控件
.asax 包含asp.net应用程序级事件的事件语法
.config 配置文件,用于设置网站应用程序的各种属性
.asmx 供宿主Web服务在本地或远程使用
 
第一个小例子: 动态登录程序
  1. public void ProcessRequest (HttpContext context) {
  2. string modelPath = context.Server.MapPath("LoginModel.htm");
  3. string htmlSendBack = System.IO.File .ReadAllText(modelPath);
  4. context.Response.ContentType = "text/plain";
  5. context.Response.Write(htmlSendBack);
  6. if (!string .IsNullOrEmpty(context.Request.Form[ "txtName"]))
  7. {
  8. if (context.Request.Form["txtName" ] == "zhu" &&
  9. context.Request.Form[ "txtPassword"] == "123" )
  10. {
  11. context.Response.Write( "登录成功!" );
  12. }
  13. else
  14. context.Response.Write( "登录失败!" );
  15. }
 
4.一般处理程序(HttpHandler)
     一.一般处理程序(HttpHandler):
          是一个实现System.Web.IHttpHandler特殊接口的类.
          任何一个实现了IHttpHandler接口的类都能作为一个外部请求的目标程序: (凡是没有实现此接口的类,都不会被浏览器请求)
     二.它由支持asp.net的服务器调用和启动运行.一个HttpHandler程序负责处理它对应的一个或一组URL地址的访问请求,并接受客户端发出的访问信息和产生相应内容.
     三.咱可以通过创建一个我们自己的HttpHandler程序来生成浏览器代码返回客户端浏览器
     四.HttpHandler程序可以完成普通类程序能完成的大多数任务:
          1.湖区客户端通过HTML的Form表单提交的数据和URL参数
          2.创建对客户端的响应信息内容
          3.访问服务端的文件系统
          4.连接数据库并开发基于数据库的应用
          5.调用其他类
 
5.请求相应的过程
  1. 用户在浏览器地址栏输入:http://localhost:80777/FirstShower.ashx
  2. 服务器接收到用户的请求,发现是请求.ashx文件,便将请求交给framework执行,fw找到对应的文件first.ashx,执行后将生成的字符串(通常是html+css+javascript格式)返回浏览器
  3. 浏览器接收到服务器返回的数据,并按照http语法解释执行,以界面的方式展示给用户看到.(此时如果html等代码中包含外部文件,则再次发送单独请求服务器相应文件数据)
6.HTTP请求详解图
 
7.ashx? -HttpHandler(一般处理程序)
 
     IHttpHandler  hander = new 页面类();
     hander.ProcessRequest(); //调用的页面类中的方法,这是接口的优点
    
     ContentType  标记放回对象在网页中的解释语言    text/html使用html语言翻译
                         就是设置服务器发出的响应报文的ContentType属性,浏览器根据此属性内容,使用不同的方法处理[响应报文]
     
8.编译过程
  1. 每一个请求都会要创建 一个HttpWorkerRequest和HttpApplication
  2. HttpWorkerRequest 里面 放的是 每一个请求报文里的数据
  3. HttpApplication对象里面放的是  每一个请求要执行的代码
  4. 为每个请求创建单独的HttpApplication对象, 那么针对此次请求的所有运行过程都在此对象中完成
     Factory的理解:: HttpApplication池,每次HttpApplicationFectory都会在这个池里找有没有空闲的HttpApplication对象,如果有,就直接拿出来用,没有就创建新的使用.
     服务器做的事情:  接受浏览器请求, 创建页面类的对象, 实现接口, 调用里面的方法, 返回相应的东东
     HttpRuntime里面,由此类,处理所有的请求,它的工作
  1. 分析请求报文,并将报文数据封装入一个叫做HttpWorkerRequest类对象
  2. 创建HttpContext对象, 次对象是当前请求的上下文环境,里面包含处理请求的所有参数数据,其中最重要的就是HttpRequest和HttpResponse两个类(方便取值)
  3. HttpRequest主要包含了所有的请求信息,这些信息来源于HttpWorkRequest对象,对象包含属性:Form(客户连接数据)QueryString(客户端url参数)
  4. HttpResponse主要包含了一个FileStream对象, 用来保存页面类执行过程中要输出给浏览器的数据
  5. 通过调用HttpApplicationFectory的类的一个静态方法来创建HttpApplication类对象中对应属性
  6. 因为在HttpApplication里要运行被请求的页面类对象里的ProcessRequest方法,所以,需要将HttpContext对象传入到HttpApplication中来          ( IHttpHandler hander = 通过反射方式创建被请求的页面类对象    )?
     执行HttpApplication的ProcessRequest方法 ( 可以将此方法的执行过程看成一个管道 ) 此方法中, 要先后按照顺序执行19个委托事件
  • 在其中第8个事件时,创建 被请求的页面类的对象
  • 在11个和12个中间,执行了 被创建的页面类的ProcessRequest方法
 
9.服务器怎么接受和发送数据?
     HTTP Request Response
     
系统对象 ASP.NET
Page 指向页面自身的方式.作用于为页面执行期
Request 读取客户端在Web请求期间发送的值(http请求报文数据)
Response 封装了页面执行期返回到HTTP客户端的输出(http响应报文数据)
Application 作用于整个程序运行期的状态对象
Session 会话期状态保持对象,用于跟踪单一用户的会话
Cookie 客户端保持会话信息的一种方式
Server 提供对服务器上的方法和属性的访问
 
 
9.1 Request(HttpRequest) & Response(HttpResponse)
     一, 浏览器提交数据方式
         1 表单 (数据藏在请求报文体中, 格式txtname=jamws&txtpwd=123)
          <form action="login.ashx" method="post">
               <input type="text" name="txtname"/>
               <input type="password" name="txtpwd"/>
          </form>
         2地址栏URL参数(和表单的Get方式一样):键值对 浏览器请求属性 http://127.0.0.1/login.ashx?txtname 1=jordan&txtpwd 1=123
      二,服务器如何获取浏览器提交的数据?
          1获取表单数据 context.Request.Form["txtname"] 
             2获取URL参数: context.Request.QueryString["txtname1"]
       三,服务器如何向浏览器输出参数
               context.Response.Write("我是从服务器输出到浏览器的数据!");
 
     当用户在浏览器点击提交按钮时,浏览器自动帮我们将表单中带name的控件的值以赋值对字符串的方式,作为[http请求报文体]提交到服务器.
     
     Request本身也可以看做一个客户端提交过来的所有参数 
     Request.Form 包含的只有客户端通过post方式提交过来的数据
     Reuqest.QueryString 包含的只有客户端通过get方式提交过来的数据
  get : 获得,拿去--当浏览器发送请求报文是为了从服务器获得数据的时候,就用get
  post : 传递,有地,发送过去. --当浏览器发送请求报文传递参数过去,就用post
  1. public void ProcessRequest (HttpContext context) {
  2. context.Response.ContentType = "text/html";
  3. System.Text. StringBuilder sbHTML = new System.Text.StringBuilder();
  4. sbHTML.Append( "<html><head><title>登录页面</title></head><body><form action='03Login.ashx' method='post'>");
  5. sbHTML.Append( "用户名:<input type='text' name='txtname' /> <br />" );
  6. sbHTML.Append( "密码:<input type='password' name='txtpwd' /> <br/>" );
  7. sbHTML.Append( "<input type='submit' value='登录'/><a href='04Reg.ashx?a=222'>注册</a> <br/>");
  8. sbHTML.Append( "</form></body></html>" );
  9. context.Response.Write(sbHTML.ToString());
  10. //获得浏览器表单post方式传递来的值
  11. string strUserName = context.Request.Form["txtname"];
  12. if (!string .IsNullOrEmpty(strUserName))
  13. {
  14. context.Response.Write( "Form中的值:" + strUserName);
  15. }
  16. //获得浏览器表单get方式传递来的值
  17. string strUserNameGet = context.Request.QueryString["txtname"];
  18. if (!string .IsNullOrEmpty(strUserNameGet))
  19. {
  20. context.Response.Write( "Url中得到的值:" + strUserNameGet);
  21. }
  22. }
 
9.2 Request(HttpRequest) 重要成员
     
  QueryString属性 获取通过Get方式传来的数据
浏览器: 超链接, 和表单method=get
Request Form属性 获取通过Post方式传来的数据  浏览器method=post
  Params属性 客户端提交的数据集合
 
  Write方法 直接在页面上输出内容
Response Redirect方法 重定向 向浏览器发送状态码302(命令浏览器重定向) 
并且通过: Location: ..../05Redirect.ashx  
告诉浏览器重定向的地址
浏览器,根据重定向地址进行访问
  End方法 结束输出
重定向原理图如下:
------------------模拟wubForm的用户控件数据保持------------------
  1. public void ProcessRequest (HttpContext context) {
  2. context.Response.ContentType = "text/html";
  3. string strNum1 = context.Request.Form["txtNum1" ];
  4. string strNum2 = context.Request.Form["txtNum2" ];
  5. //判断是否格式正确
  6. string result = "0" ;
  7. int num1 = 0, num2 = 0;
  8. if (!string .IsNullOrEmpty(strNum1) && ! string.IsNullOrEmpty(strNum2))
  9. {
  10. if (int .TryParse(strNum1, out num1) && int.TryParse(strNum2, out num2))
  11. {
  12. result = (num1+num2).ToString();
  13. }
  14. else
  15. {
  16. result = "输入格式错误" ;
  17. }
  18. }
  19. System.Text. StringBuilder sbHTML = new System.Text.StringBuilder();
  20. sbHTML.Append( "<!DOCTYPE><html><head><title>计算器</title></head><body><form action='06Calculate.ashx' method='post'>");
  21. sbHTML.Append( "<input type='text' name='txtNum1' value='" +
  22. num1.ToString() + "' /> + <input type='text'name='txtNum2' value='" +
  23. num2.ToString() + "'/> = <input type='text' readonly='readonly' value='" +
  24. result.ToString() + "' <br/>");
  25. sbHTML.Append( "<input type='submit' value='计算'/><br />" );
  26. sbHTML.Append( "</form></body></html>" );
  27. context.Response.Write(sbHTML.ToString());
 
------------------模拟WebForm回传检查机制------------------

  1. public void ProcessRequest (HttpContext context) {
  2. context.Response.ContentType = "text/html";
  3. string strNum1 = context.Request.Form["txtNum1" ];
  4. string strNum2 = context.Request.Form["txtNum2" ];
  5. //判断是否格式正确
  6. string result = "0" ;
  7. int num1 = 0, num2 = 0;
  8. //如果包含隐藏域的话, 才执行相加操作
  9. if (!string .IsNullOrEmpty(context.Request.Form[ "hidIsPostBack"]))
  10. {
  11. if (!string .IsNullOrEmpty(strNum1) && ! string.IsNullOrEmpty(strNum2))
  12. {
  13. if (int .TryParse(strNum1, out num1) && int.TryParse(strNum2, out num2))
  14. {
  15. result = (num1 + num2).ToString();
  16. }
  17. else
  18. {
  19. result = "输入格式错误" ;
  20. }
  21. }
  22. }
  23. System.Text. StringBuilder sbHTML = new System.Text.StringBuilder();
  24. sbHTML.Append( "<!DOCTYPE><html><head><title>计算器</title></head><body><form action='06Calculate.ashx' method='post'>");
  25. sbHTML.Append( "<input type='text' name='txtNum1' value='" +
  26. num1.ToString() + "' /> + <input type='text'name='txtNum2' value='" +
  27. num2.ToString() + "'/> = <input type='text' readonly='readonly' value='" +
  28. result.ToString() + "' <br/>");
  29. sbHTML.Append( "<input type='submit' value='计算'/><br />" );
  30. sbHTML.Append( "<input type='hidden' name='hidIsPostBack' value='1' /></form></body></html>" );
  31. context.Response.Write(sbHTML.ToString());
  32. }
 
----------------------------基于面向对象的计算器----------------------------
  1. //---------------------------------类定义--------------------------------------------
  2. /// <summary>
  3. ///一个计算器类
  4. /// </summary>
  5. public class Class1
  6. {
  7. //第一个操作数
  8. public int num1 { get; set; }
  9. //第二个操作数
  10. public int num2 { get; set; }
  11. //操作符
  12. public string calculateChar{ get; set; }
  13. //结果
  14. public string result { get; set; }
  15. public Class1()
  16. {
  17. }
  18. /// <summary>
  19. /// 计算结果
  20. /// </summary>
  21. /// <param name="a"> 第一个操作数 </param>
  22. /// <param name="b"> 第二个操作数 </param>
  23. /// <param name="oper"> 操作符</param>
  24. public void GetResult(int a, int b, string oper)
  25. {
  26. this.num1 = a;
  27. this.num2 = b;
  28. this.calculateChar = oper;
  29. switch (this .calculateChar)
  30. {
  31. case "+" :
  32. result = (num1 + num2).ToString();
  33. break;
  34. case "-" :
  35. result = (num1 - num2).ToString();
  36. break;
  37. case "*" :
  38. result = (num1 * num2).ToString();
  39. break;
  40. case "/" :
  41. result = (num1 / num2).ToString();
  42. break;
  43. }
  44. }
  45. }
  1. //------------------------------------------------------页面类----------------------------------------------------------
  2. public class _07CalculateFour : IHttpHandler {
  3. public void ProcessRequest (HttpContext context) {
  4. context.Response.ContentType = "text/html";
  5. //实例化一个计算器对象
  6. Class1 calcu = new Class1();
  7. string strNum1 = context.Request.Form["txtNum1" ];
  8. string strNum2 = context.Request.Form["txtNum2" ];
  9. string strOper = context.Request.Form["optionOper" ];
  10. int num1 = 0;
  11. int num2 = 0;
  12. if (!string .IsNullOrEmpty(context.Request.Form[ "hidIsPostBack"]))
  13. { //模拟回访
  14. if (!string .IsNullOrEmpty(strNum1) && ! string.IsNullOrEmpty(strNum2))
  15. { //判断为空
  16. if (int .TryParse(strNum1, out num1) && int.TryParse(strNum2, out num2))
  17. { //判断格式
  18. calcu.GetResult(num1, num2, strOper);
  19. }
  20. else
  21. {
  22. calcu.result = "参数格式不正确" ;
  23. }
  24. }
  25. }
  26. System.Text. StringBuilder sbHTML = new System.Text.StringBuilder();
  27. sbHTML.Append( "<!DOCTYPE ><html><head></head><body><form action='07CalculateFour.ashx' method='post'>");
  28. sbHTML.Append( "<input type='text' name='txtNum1' value='" +calcu.num1.ToString()+"'/>");
  29. 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>" );
  30. sbHTML.Append( "<input type='text' name='txtNum2' value='" +calcu.num2.ToString()+"'/> = ");
  31. sbHTML.Append( "<input type='text' readonly='readonly' name='txtResult' value='" +calcu.result+"'/>");
  32. sbHTML.Append( "<input type='submit' value='计算'/>" );
  33. sbHTML.Append( "<input type='hidden' name='hidIsPostBack' value='1'/></form></body></html>" );
  34. context.Response.Write(sbHTML.ToString());
  35. }
10.注意,关于提交表单的内容
  • 只能为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等标签被忽略.
11.使用模版来清晰代码,利用虚拟模版网页
  • 使用隐藏字段, 模拟IsPostBack, <input type="hidden" name="hidIsPostBack" value="true" />
  • 在模版网页中,涉及到修改值得时候, 可以使用占位符, 之后, 直接替换就可以了, 使用{name}的形式即可
 
  1. public class _08Cal : IHttpHandler {
  2. public void ProcessRequest (HttpContext context) {
  3. context.Response.ContentType = "text/html";
  4. //--------------------读取html内容模版----------------------
  5. //根据虚拟路径获得物理路径
  6. string path = context.Server.MapPath("CalculateModel.htm"); //这里仔细记住
  7. string strHTML = System.IO.File.ReadAllText(path); //这里也要好好记住
  8. //------------------获得浏览器提交的内容---------------------------
  9. string strNum1 = context.Request.Form["txtNum1"];
  10. string strNum2 = context.Request.Form["txtNum2"];
  11. int num1 = 0;
  12. int num2 = 0;
  13. string result = "";
  14. if (!string.IsNullOrEmpty(context.Request.Form["hidIsPostBack"]))
  15. {
  16. if (!string.IsNullOrEmpty(strNum1) && !string.IsNullOrEmpty(strNum2))
  17. {
  18. if (int.TryParse(strNum1, out num1) && int.TryParse(strNum2, out num2))
  19. {
  20. result = (num1 + num2).ToString();
  21. }
  22. else
  23. {
  24. result = "输入格式错误";
  25. }
  26. }
  27. }
  28. //-------------------------输出html到浏览器------------------------
  29. //字符串替换,进行赋值
  30. strHTML = strHTML.Replace("{num1}", num1.ToString()).Replace("{num2}", num2.ToString()).Replace("{result}", result.ToString());
  31. context.Response.Write(strHTML);
  32. }
  33. public bool IsReusable {
  34. get {
  35. return false;
  36. }
  37. }
  38. }
 
  1. //---------------------------------模版网页显示---------------------------------------
  2. <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. < html>
  4. < head>
  5. < title> 计算器 </title >
  6. </ head>
  7. < body>
  8. < form action ='06Calculate.ashx' method ='post'>
  9. < input type ='text' name ='txtNum1' value ='{num1}' /> +
  10. < input type ='text' name ='txtNum2' value ='{num2}' /> =
  11. < input type ='text' readonly ='readonly' value ='{result}' />< br />
  12. < input type ='submit' value ='计算' />
  13. < input type ='hidden' name ='hidIsPostBack' value ='1' />
  14. </ form>
  15. </ body>
  16. </ html>
  
12.表单的提交方式Get与Post
     get传递的数据量是有限的, post发送的数据量没有限制 
     post会产生刷新重新提交表单的问题, get就没有这样的问题,  可以通过地址栏重敲解决该问题
     Get方式URL数据格式,  ? 后面  & 分割,  URL中有汉字会进行URL编码
     表单域只有设定了name的才会传参, get看得清楚, submit如果有value, 也会传递
     
13.数据自增
  • http是无状态的, 浏览器每次请求服务器的页面类时,服务器都会创建一个该类的对象,并调用里面的方法执行,最后返回输出结果给浏览器,然后对象销毁断开连接
  • 浏览器和服务器都是不认识对方的
Connection: Keep-Alive  告诉服务器浏览器希望使用的长连接   短连接是相当于一次性连接
短连接的缺点: 尽管客户只想访问一个页面,html但依然向浏览器发送了多次新的连接请求,建立了多次新的连接,消耗了双方的时间的资源
http短连接: 服务器在每次响应完浏览器的一个请求后立马关闭当前连接(socket).
长连接:  服务器不会立刻在发送完数据后关闭连接通道(套接字),而是会等一段时间(2秒),两秒之内,如果相同浏                             览器再次发送请求过来,那么继续使用此连接通道向浏览器输出数据,然后再登一段时间,直到2秒后,没有新的请求过来,那么服务器关闭连接通道
 
 
 
反编译工具不停去找,去理解原理,运行机制  ---  牛人
 
一般处理程序_简单请求, 关于ContentType, 获得url参数(http参数get/post传递本质). (请求过程原理; 总体请求过程原理,页面编译过程), 请求数据和接受数据以及定向原理, 模拟WebForm回传检查机制, 模拟wubForm的用户控件数据保持, 自增(解决http的无状态), 登录过程
 
接下去的学习:
加法计算器, 增删查改, 搭建三层构架, 列表和删除, 删除信息功能, 新增
 
上传单个文件, 生成缩略图, 一般处理程序输出图片(简单验证码图片), 输出水印图片, 附近下载, 复习总结

asp.net基础学习笔记的更多相关文章

  1. ASP.Net MVC开发基础学习笔记:一、走向MVC模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  2. ASP.Net MVC开发基础学习笔记(1):走向MVC模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  3. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  4. 路由其实也可以很简单-------Asp.net WebAPI学习笔记(一) ASP.NET WebApi技术从入门到实战演练 C#面向服务WebService从入门到精通 DataTable与List<T>相互转换

    路由其实也可以很简单-------Asp.net WebAPI学习笔记(一)   MVC也好,WebAPI也好,据我所知,有部分人是因为复杂的路由,而不想去学的.曾经见过一位程序猿,在他MVC程序中, ...

  5. [ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载、ID型别差异

    [ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载.ID型别差异 原始码下载 ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.NET的验证.授 ...

  6. 【C#编程基础学习笔记】4---Convert类型转换

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...

  7. 【C#编程基础学习笔记】6---变量的命名

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...

  8. ASP.NET MVC学习笔记-----Filter2

    ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...

  9. ASP.NET MVC学习笔记-----Filter

    ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...

随机推荐

  1. USB封包格式

    1.起始(SOP)封包 根集线器会在每1 ms时,送出SOF封包.这介于2个SOF封包之间的时间,即称为帧(frame).SOF封包虽是属于令牌封包的一种,但却具有独自的PID形态名称SOF.通常目标 ...

  2. jQuery插件之jqzoom

    jqzoom是一款基于jQuery的图片方法插件. 使用方法:1.引入jQuery与jqzoom,jqzoom.css 2.准备两张一大一小大小相同的图片,小图片放在<img>标签的&qu ...

  3. java代码模拟先入先出,fifo

    最近在做一个先入先出的出库.琢磨了一下,写了一个简单的java代码测试: public static void main(String[] args) { LinkedList q = new Lin ...

  4. sqlite数据库读写在linux下的权限问题

    近期在学linux,恰巧有个php项目要做.于是配置好环境打算在linux下做. 无奈站点执行后一片空白.经过调试发现是sqlite数据库的问题. 安装sqlite扩展 apt-get install ...

  5. 在Hadoop集群上,搭建HBase集群

    (1)下载Hbase包,并解压:这里下载的是0.98.4版本,对应的hadoop-1.2.1集群 (2)覆盖相关的包:在这个版本里,Hbase刚好和Hadoop集群完美配合,不需要进行覆盖. 不过这里 ...

  6. poj 2774 最长公共子--弦hash或后缀数组或后缀自己主动机

    http://poj.org/problem?id=2774 我想看看这里的后缀数组:http://blog.csdn.net/u011026968/article/details/22801015 ...

  7. C++ 实现Trim

    一.字符串去空格(没有处理字符串中间的空格) lTrim:除去字符串开头的空格 eg."    abc123    " --> "abc123    " ...

  8. idea maven jetty插件热部署

    maven tomcat插件好像无法进行热部署,jetty可以如下配置实现热部署,但是idea无法进行自动编译,所以需要如下快捷键 Ctrl+Shift+F9,编译 Ctrl+F9,生成项目 < ...

  9. JS判断是不是Decimal类型(正则实现)

    备忘: function isDecimal(item) { var obj = $(item); if (obj.length > 0) { if ($(obj).val() != null ...

  10. <audio> 标签简介

    定义和用法 <audio> 标签定义声音,比如音乐或其他音频流. 实例 一段简单的 HTML 5 音频: <audio src="someaudio.wav"&g ...