ASP.NET初级学习

1.          ASP.Net简介及学习

 1.     什么是ASP.Net –ASP.Net是一种动态网页技术,在服务器端运行.Net代码,动态生成HTML。可以使用JavaScriptDom在浏览器端完成很多工作。

学习ASP.NET不要陷入如何使用服务器控件的误区中,我们要懂得每个控件的运行原理。不要做一个只会拖控件的“程序员”。

2.     webApplication webSite的区别。

WebApplication 有命名空间,更改c#代码后要重新启动浏览器方能看到更改的效果。webSite则没有这个东东。

webSite是由ASP带过来的程序开发习惯,但是它只适用于小型网站的开发,因为代码出错了不容易发现,而且所有页面共用一个命名空间,代码不容易管理。讲简单基础知识时使用webSite,讲高级技术和做大型项目用WebApplication

 

3.自己动手写动态网站

提交到服务器的表单元素一定要设置name属性(名字),id是设给Domjquery用的,服务只认nameform表单提交到Hello1.ashx页面处理

 

ashx是一个服务器处理程序,页面form提交到服务器的数据都是调用他来处理,其实aspx也是处理程序,只不过是通过.Net封装之后的处理程序,继承自ashx。

 

Http是请求、响应的模型,服务器不会来读取浏览器的内容,用户在输出的内容中填入数据,能够得到的就是客户端浏览器提交过来的数据。

4.GetPost的区别

Get方法传参数,可以在地址栏看到参数,而post传递的表单值隐藏到http报文中,就看不到了

Get传递的数据量是有限的,如果要传递大量的数据,不能有getPost则没有这个限制;而post会有浏览器提示重新提交表单的问题,而get没有

 

Get方式URL数据格式,服务器文件名后跟着?,由于客户端可能向服务器端提交多个键值对,键值之间用&进行分割,如果URL中有汉字、特殊字符,则要对url进行编码。

 

Post方法刷新时,他会提示你是否重新发送信息,不重送信息则无法刷新页面。

 

5.Input版自增

取得页面提交的数据,在ashx页面上进行处理,然后返回响应值。

6.ViewState初探

查看生成的源代码,ASP.Net将所有隐藏内容统一放到了名字为_WIEWSTATE的隐藏字段个,使用序列化算法将所有隐藏内容放到一个字符串中,点击几次再用ViewStateDecoder这个工具查看viewstate内容,发现了确实将这些改变的内容放到了ViewState中。

 

Label版本的值存放到了ViewState中,TextBox版本的不存,因为TextBox就是input,自己就会提交给服务器,不需要隐藏字段。

禁用ViewState的方法,禁用控件的ViewState设定enableviewstate=false,禁用整个页面的ViewStateaspx页面源码最上边的Page指令区内加上EnableViewState=”false”.内网系统,互联网的后台可以尽情的用ViewState

无状态HttpHttp协议是无状态的,不会记得上次和网页发生了什么,服务器不记得上次给了浏览器什么,浏览器要记住这些值,(input就放到value中,对于其他的值就要放到隐藏字段中啦,比如ViewState)下次提交时服务器在原来的基础上进行处理。

状态信息保存到隐藏字段中的缺点:加大网站的流量,降低访问速度,机密数据放到表单中会有数据欺骗等安全性问题

 

Cookie

有时候希望在服务器的任意一个地方存取一些和访问者有关的信息,这时候就不方便将信息保存到表单中了,而Cookie是和站点相关的,并且每次向服务器请求的时候,除了发送表单外,还会将所有和站点有关的Cookie都提交到服务器。服务器返回数据除了普通的html数据外,还会返回修改的Cookie,浏览器把拿到的Cookie值更新到本地浏览器的Cookie就可以了。

网站的优化,大型网站,图片的服务器域名跟网站域名不一样,这样就不会把网站的cookie提交给图片。比如 www.yahoo.com  图片则为:www.yimg.com/a.gif 减少cookie的传输。

Session原理

首先SessionId保存在客户端的cookie中,然后在服务器内存中开辟一块空间放sesion内容。 sessionIdkeySession内容为value的键值对。如下:

private static IDictionary<string, IDictionary<string, object>> data = new Dictionary<string, IDictionary<string, object>>();

因为session本身又是一个键值对,一个sessionId对应的内容可以是多个键值对,比如sessionID为112233 。对应的value又是一个Dictionary。字典名为session。则可以有session[“name”],,sesion[“sex”]等多个值。

不要放太大的对象到SessionSession还会有超时销毁的机制.可以看到,Session不是http协议规定的,是ASP.net实现的。

Session实现验证码,HttpHandler要能够操作Session,必须要实现IrequiresSessionState接口。

 

新建一个一般处理程序:

public void ProcessRequest (HttpContext context) {

        context.Response.ContentType = "image/JPEG";

        using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(100, 50))

        {

            using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap))

            {

                /*

                g.DrawString("腾讯呀的",new System.Drawing.Font("宋体",18),System.Drawing.Brushes.Red,new System.Drawing.Point(0,0));

                bitmap.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);*/

                Random rand = new Random();

                int code = rand.Next(1000,9999);  //动态生成一个验证码

                HttpContext.Current.Session["YanZhengMa"] = code; //将验证码保存到Session中

                string strCode = code.ToString();

                g.DrawString(strCode, new System.Drawing.Font("宋体", 30), System.Drawing.Brushes.Red, new System.Drawing.Point(0, 0));    //画一个验证码图片。

                bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

            }

        }

}

<body>

    <form id="form1" runat="server">

    <div>

    <img src="验证码?.ashx" alt="看不清,换一张?" onclick="this.src='验证码?.ashx?aa='+new Date()"/>

    </div> <%--向一般处理程序请求一个图片。因为验证图片是由一般处理程序画出来的--%>

    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="提交" />

 

    </form>

</body>

posted @ 2011-04-16 23:54  GY小小鸟  阅读(367)  评论(0编辑  收藏  举报