黑马程序员-------asp.net初级

---------------------- <a href=" http://edu.csdn.net "target="blank">ASP.Net+Android+IOS开发</a>

<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

一、什么是asp.net 它与.net C#有什么联系呢?

Asp.net是动态网页技术,是.net框架下的一门技术,.net是一个框架,支持多门语言,VB,C,F#等等,而.net可以编写window.Phone程序,桌面应用程序,网站开发,与mono技术结合,可以开发3D游戏等等...asp.net就是其下的网站开发的技术,C#是运行在.net平台上的一种语言,无论开发什么类型的程序,都要用到的主流语言。

二、网站的访问过程

网站是由许许多多的页面形成,可以按照其存储方式分为静态网页和动态网页,静态网页是运行在浏览器端的网页,不过,其页面元素也可以是有动态效果的,一般是由一些脚本控制的,例如Javascriptdom,jquery等等。而动态网页是服务器端的内容,由浏览器向服务器发出请求,在服务器端处理请求,并把处理之后的内容发给浏览器,由浏览器把接收到的内容解析成HTML代码,展现在用户的面前。

就是在用户浏览某个动态页面时的三个过程:

浏览器发送请求-----服务器端处理-----响应并返回请求的页面

三、Asp.net核心

一般处理程序

一般处理程序,用来处理用户的请求。

1、表单提交

html代码中,表单提交到服务器,那么表单中的值是怎样被服务器端获取的呢?

这就要借助html中表单元素的属性,每个元素都有name属性,和id属性,id属性是用来区分元素的唯一标识,JS要通过这个属性来操作某个元素,而name属性,就是用来提交给服务器的,在html中要给表单元素定义name属性,不然,提交到服务器后,服务器还是收不到值

例如:这是一个简单的表单示例:    

<form action=”test.aspx” method=”get”> //action属性是把这个页面要提交到test.aspx 

//method是提交方式

姓名:<input type=”text” name=”username”><br/> //表单中的一个文本框

<input type=”submit”>                         //提交按钮

</form>

Checkbox的选中后是以 “name”=on 方式提交的

2、表单中要提交到服务器的内容

不是所有的表单中的内容都会被提交到服务器,而且提交是以name=value键值对方式

只要满足三种条件的元素,就会被提交给服务器。

1)在form中的元素,因为,form标签就是供提交到服务器的。

2)只有三种标签<input ><textarea><selected>,因为其他标签是一些提示信息,是专门给用户看的。不必提交到服务器。

3)要有name属性,如果没有name属性,它的值也不会被提交到服务器,有些元素如果设定了name但是没有值,也不会被提交,像checkbox,radio

3、Getpost 

Getpost是两种提交方式,用get方式,可以在url地址栏中看到信息,是键值对的方式提交的。服务器便从url中,提取相应的内容。如果是post方式,它的数据是发送到http报文中了,从url中则看不到用户填入的信息。因此,如果是以get方式提交,信息就很容易被别人知道,很不安全。如果,页面要是有一些用户比较隐私的个人信息,一般不用get,其次,get对文本的字数有限制,当发表一篇文章也不用get

4、http协议

http协议是浏览器与服务器之间通信的协议。在请求--处理--响应的后,会有一些报文和响应内容。

http报文有请求报文和响应报文,报文中存有很多信息,例如,浏览器的版本信息,浏览器的来源信息,浏览器的请求时间,用的语言等等。响应的时候有一些响应类型(content-type),例如,返回的是文本还是图片,还是一些脚本信息等等,还有一些相关的响应码,常见的有200代表,请求页面的信息成功返回,302代表让浏览器去重新访问另一个页面,404是代表浏览器请求的页面不存在,500代表服务器出现了错误等等。

长连接与短链接

浏览器与服务器是短链接,每次发送请求都会重新连接一次,响应本次请求之后,会断开连接,这样就可以处理更对的请求了。

长连接是一旦连接上了,就一直保持连接,到退出才断开连接,这会使浏览器处理请求的效率大大降低。

5、Redirect()//重定向

让浏览器重新访问另一个页面()里的参数的新页面的地址。

四、模板引擎

模板引擎的引入:

HTML代码放入一般处理程序中,就可以更好的处理页面内容了,但是这时如果要改动HTML代码,就需要改动所有引用这段HTML的代码,工作量很大,而且,不宜分工,美工和程序员都需要改动同一段代码,这样出现了模板引擎,可以把HTML代码单独写入一个文档,这是美工改动HTML代码,程序员改动程序代码就可以了。

Nvelocity模板引擎

模板引擎有很多种,而NVelocity模板引擎的功能就很强大,可以在HTML文档和处理程序中,加入相应的代码,就可以控制页面了。

在处理程序中引入相关的代码:

                String pc=”me”;

                VelocityEngine Engine = new VelocityEngine();

                Engine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");

                Engine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH,

                System.Web.Hosting.HostingEnvironment.MapPath("~/"));//模板文件的位置

                Engine.Init();

                VelocityContext vcontext = new VelocityContext();

                vcontext.Put("p", pc);        //要替换模板文件的内容    

                Template template = Engine.GetTemplate("test.htm");//引用的模板文件名

                System.IO.StringWriter writer = new System.IO.StringWriter();

                template.Merge(vcontext, writer);

                string html = writer.GetStringBuilder().ToString();

                context.Response.Write(html);//打印替换好的模板文件

HTML中的基本使用:

1)占位符的替换:$”名称”

HTML代码示例:

<html><head></head>

<p>作者是:$l</p> //模板引擎会把$l替换成指定内容,在模板中也需要改动成vcontext.Put("l", pc); 

</html>

2)替换类的对象、数组、集合等

$p.value //接收到已定义好的类的对象,通过对象名.属性名也也可以访问。

还可以访问处理程序中定义好的各种类型的数据

3)各类集合的遍历

语法:#each($临时变量名 in  对象名)

          调用临时变量

      #end 

示例:部分HTML代码

#foreach($i in $img)

<ul>

<li><img class="sty" src='./pic/$i' /></li>

</ul>

#end

4)If控制语句

语法:

#if(条件)

代码...

#elseif(条件)

代码....

#else

代码....

#end 

5)在每个页面中引用模板页

#include(“页面名称”);相同的代码可以放入一个文件中,供别的页面引用,也便于维护。

#parse(“页面名称”);

#include()#parse()都是引用别的文件的方法,它们的不同点是#include()只是单村的引用文件,而#parse()不但可以引用文件,而且,可以解析处理程序中的模板代码。替换到HTML页面中的代码,被引用的页面也可以解析。

6)Cookie简介

Cookie是用户浏览页面时,浏览器保存的一些数据信息,有了cookie就可以自由的读取数据,不用每次要借助url传值了,因此,服务器也不会被动的接受一些值了,浏览器每次想服务器发出请求时,连同cookie会自动的一起提交到服务器,但是cookie也是有生命周期的,我们可以自己手动清楚浏览器里的cookie,有时,浏览器也会自动的清除一些cookie,

虽然有了cookie之后,存储信息方便了,但是,因为安全问题,cookie中一般不放入重要的信息。

Cookie是不能跨浏览器取值的,每个浏览器都有自己的cookie信息存放的地方,即使是同一个页面,一个浏览器存下来的信息,其他的浏览器也是不能取到的。

Cookie的存放是由限制的,浏览器之间也是由差异的。

Cookie在浏览器中,是以键值对方式存放的。

7)一般处理程序中,实现设置cookie和取值的方法

一般处理程序,在存储的cookie是以HttpCookie类型存储的

context.Response.SetCookie(HttpCookie cookie);

Cookie读取

context.Request.Cookies[]//[]中写入索引编号,或者cookie存入是的名称

Cookie的一个属性是Expires,可以设置到期时间。

值是一个DateTime类型的

示例:

HttpCookie cookie = new HttpCookie("name", Content); //一个cookie信息

                context.Response.SetCookie(cookie); //保存到浏览器

                DateTime dt = DateTime.Now;获取当前时间

                dt=dt.AddDays(2); //在当前时间额外增加2天(2天之后过期)

                cookie.Expires = dt; //调用Expires属性

虽然,有一个有效期的cookie属性,但是,里面的信息不一定能保存到设定的日期,因为浏览器有时候会自动清除cookie,因为cookie的存放大小是有限制的。而且,有时,用户会手动清除。              

8)Session

Session相当于是定义在”服务器端的cookie”,如果只是在浏览器端记录信息,是很不安全的,而session的原理也是利用cookie,首先给浏览器端的cookie传入一些相关的信息,自己也记录下来相应的值。再进行验证浏览器端的cookie的值是否与sessionID一致,在一般处理程序中,要用session传值,需要实现IRequiresSessionState接口。

Session有自动销毁的机制,因为,session也需要占据一定的内存和资源,因此,一段时间过后,会自动销毁。例如,访问一个网站,很长时间没有和浏览器交互,在发出请求时,会需要重新登录。

9)AJAX

通俗的讲,AJAX就是布局网页刷新的技术,打开一个页面,当进行某种操作时,只针对这个部分进行刷新。

其中,XMLHttpRequest是基础对象,用于网页与后台服务器交互的

Var xmlhttp=new XMLHttpRequest()  //建立XMLHttpRequest对象的一个实例

Xmlhttp.open(“提交方式”,”处理文件的地址”,”是否异步”)//准备发送工作

提交方式可选值(post,get

是否异步:true为异步,false 为同步

文件地址是文件在服务器上的位置。

Xmlhttp.send()//像服务器发送请求

Onreadystatechange事件//如果选择异步,就要监听这个事件,获取服务器的处理结果的状态

readyState//这个属性就是服务器的处理状态,每次状态改变,都会触发onreadystatechange

5XMLHttpRequest的处理状态

0: 请求未初始化

1: 服务器连接已建立

2: 请求已接收

3: 请求处理中

4: 请求已完成,且响应已就绪

Status//处理完成的结果 响应码 200 表示”ok”处理已成功, 404表示未找到指定的服务器

处理完毕之后,返回的响应数据有两种,字符串形式的响应数据和xml形式的响应数据

获取结果需要用到两个属性

responseText//获取字符串形式的结果

responseXML//获取xml形式的结果

10)JSON

用于服务器端像浏览器端传送一些复杂的数据

C#中,将.net中的对象序列化成字符串的方法

引用using System.Web.Script.Serialization;命名空间

JavaScriptSerializer类中的Serialize()方法把数据字符串的方式序列化保存起来。

Json格式的解析,eval()方法可以将json格式的对象,转换为JavaScript的对象

JSON.Parse()//浏览器解析json格式的数据。

如果传入的是普通对象,直接调用JSON.Parse()就行了,但是如果传入的是一个数组或者集合,就要用到for来遍历循环访问数组。

11)CKEditor控件

可视化编辑器

在页面中,引用该控件,可以很方便用户的一些编辑操作。

方式:

1)从网站上下载开源的代码ckeditor压缩包,其中,包含许多文件,在项目中,在.net中,把下面的这些相关文件引用到项目中来。

2)在HTML页面中通过<Script>标签引用该文件

<script type="text/javascript" src="Scripts/CKEditor/ckeditor.js">

    </script>

3)在使用ckeditor对象中的replace()方法调用就可以了

CKEDITOR.replace(被替换的控件的ID);

使用一个变量来接收它的返回值,可以调用它的setData()方法来进行赋值

示例:

var txt = document.getElementById('txt');

var skeditor = CKEDITOR.replace(txt);

skeditor.setData('hello,zch');

           

12)获取上传文件的路径

HttpPostedFile

context.server.MapPath()//可以获取相对于网站根目录的文件或文件夹的路径来获取文件的全路径。

获取上传文件需要注意几点问题,否则服务器端不能取到该文件

1)表单的提交方式设置为post

2)在表单中添加属性 enctype=”multipart/form-data”

一般处理程序中的操作:

首先调用Request对象

HttpPostedFile file = context.Request.Files["img"]; 

从客服端浏览器上传提交的name,并且用HttpPostedFile类的对象来接收

string path = context.Server.MapPath("~/imgs/");//获取服务器所在的物理路径

file.saveAs(path+”文件名”)//把上传的文件传入到服务器

把这个文件的相对根目录的地址传入到数据库中,就可以在页面中显示了。

13)在页面中分页显示信息。

首先,修改sqlserver语句使用开窗函数ROWNUMBER()

示例:

select * from

(select  stu.*,s.Chinese,s.English,s.Math,s.ZongHe,ROW_NUMBER() 

 over (order by stu.Fid  asc ) as rownumber

 from [dbo].[StudentShiWan] as stu left join

  [dbo].[ScoreShiWan] as s on stu.FScore=s.id) as t 

  where t.rownumber between  @num1 and @num2

把按照ROWNUMBER()函数排序的表作为一个结果集,用where语句控制查询出来的条数

同时传入@num1@num2参数来定义是几条数据。

Ceiling()//天花板数,返回一个double类型的数,它用来计算一个小数中大于或者等于这个数的最接近这个数的最小的整数。

通过这个函数获取总页数,最后,根据这个数的大小,来动态生成超链接。

 

---------------------- <a href=" http://edu.csdn.net "target="blank">ASP.Net+Android+IOS开发</a>

<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值