、、等标签仅供显示用,没有提交到服务器的必要。
2.只有value属性的值才会提交给服务器。以input标签为例,input标签有title、type、disabled等属性,但是这些属性都是供显示用的,用户并不能修改,只有value属性才是用户输入的属性,因此只有value属性的值才会被提交到服务器。
3.标签必须设定name属性。如果要通过JavaScript操作标签,必须为标签设定Id。如果要将标签的value属性值提交到服务器,则必须为标签设定name属性,提交到服务器的时候将会以“name=value”的键值对的方式提交给服务器,多个键值对之间用&分割。name是给服务器用的,id是给Dom用的。
4.除了单选按钮等少数标签之外,大部分标签的name的值不能重复。如果两个Input文本框的name都为“txtN”,那么提交结果为txtN=123&txtN=768,在服务器取时:Request.Form["txtN"]= 123,678。
对于RadioButton,同name的为一组,选中的RadioButton的value被提交到服务器。
5.如果设置了控件的disabled属性或enabled=false的话,浏览器也不会提交该控件的值。如果只读(readonly=true),还是会被提交。 6.只有放到form标签内的标签才可能会被提交到服务器,form之外的input等标签被忽略。
注意:1.易犯错误:string 转 int 时,不能使用(int)强转,必须使用对应的转换方法如 int.Parse,int.TryParse,Conver.ToInt32 2.服务器不允许使用post方式请求静态页面(因为静态页面不能接收浏览器传递(post)过来的数据)。
五、get和post的区别:
get是通过url传递表单值,post通过url看不到表单域的值;
get传递的数据量是有限的,如果要传递大数据量不能用get,比如type=“file”上传文章、type=“password”传递密码或者
post会有浏览器提示重新提交表单的问题,get则没有。
对于Post的表单重新敲地址栏再刷新就不会提示重新提交了,因为重新敲地址就没有偷偷提交的数据了。
Post方式的正确的地址很难直接发给别人。Get方式URL数据格式。服务端文件名后跟着“?”,由于客户端可能向服务器端提交多个键值对,键值对之间用“&”进行分割,如果URL中有汉字、特殊符号等,则需要对URL进行编码。
六、Request其它成员 1、Request.UrlReferrer请求的来源,可以根据这个判断从百度搜的哪个关键词、防下载盗链、防图片盗链,可以伪造。
扩展--图片盗链:
服务器B的输出给浏览器的页面中包含服务器A的图片。这样对于浏览器用户来说,只知道访问了服务器B的页面,但不知道图片是从服务器A输出的。所以服务器A要防止别的服务器访问它的图片等其它资源。
在处理程序映射上增加图片后缀的映射,把它交给对应的动态页面去判断,这样,IIS就不会直接处理图片,而是交由FrameWork处理.在文件通过请求管道时,因为设了Global.asax配置文件把关。
public class Global :System.Web.HttpApplication { /// /// 使用事件自动注册机制,此方法会自动注册到 HttpApplication请求管道的第一个事件上 /// protected void Application_BeginRequest(object sender, EventArgse) { HttpApplication application = sender as HttpApplication; HttpRequest request = application.Context.Request; HttpResponse response = application.Context.Response; //防止盗链 if (request.RawUrl.Contains(".png")) { //如果请求的来源 不是 图片所在的网站,则判断为盗链行为 if (request.UrlReferrer.Port!= 19449) { response.ContentType = "image/jpeg"; using (Image img = new Bitmap(500, 200))//创建图片 { using (Graphics g = Graphics.FromImage(img))//在图片上创建画笔 { g.DrawString("这是图片盗链",new Foont("宋体",22),Brushes.White,2,2);
}
img.Save(response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);//将图片保存在指定的流中 } response.End(); }
2、Request.UserHostAddress获得访问者的IP地址,通过Socket获得的。
3、Request.MapPath(virtulPath)将虚拟路径转换为磁盘上的物理路径,Request.MapPath("./a/b.aspx")就会得到D:\2008\WebSites\WebSite4\a\b.aspx(Server.MapPath里就是调用的Request.MapPath)
4、 (*)Request.AppRelativeCurrentExecutionFilePath,获取当前执行请求相对于应用根目录的虚拟路径,以~开头,比如“~/Handler.ashx”
5、 (*) Request.PhysicalApplicationPath,获取当前应用的物理路径,比如D:\我的文档\VisualStudio 2008\WebSites\WebSite4\
6、 (*) Request.PhysicalPath,获取当前请求的物理路径,比如D:\我的文档\Visual Studio2008\WebSites\WebSite4\Handler.ashx
7、 (*)Request.RawUrl获得原始请求URL、Request.Url获得请求的URL,区别涉及到URL重写的问题
8、 (*)Request.UserLanguages获得访问者浏览器支持的语言,可以通过这个实现对不同语言的人显示不同语言的页面。
七、Response其它成员 响应的缓冲输出:为了提高服务器的性能,ASP.Net向浏览器Write的时候默认并不会每Write一次都会立即输出到浏览器,而是会缓存数据,到合适的时机或者响应结束才会将缓冲区中的数据一起发送到浏览器。 Response对象的主要成员:
1、Response.Buffer、Response.BufferOutput:两个属性一样,Buffer内部就是调用的BufferOutput。这个属性用来控制是否采用响应缓存,默认是true。
2、Response.Flush()将缓冲区中的数据发送给浏览器。这在需要将Write出来的内容立即输出到浏览器的场合非常适用。案例:大批量数据的导入,显示正在导入第*条数据,用Thread.Sleep模拟耗时。
3、Response.Clear()清空缓存区中的数据,这样在缓存区中的没有发送到浏览器端的数据被清空,不会被发送到浏览器。
4、Response.ContentEncoding输出流的编码。
5、Response.ContentType输出流的内容类型,比如是html(text/html)还是普通文本(text/plain)还是JPEG图片(image/JPEG)。
6、Response.OutputStream 输出流,在输出图片、Excel文件等非文本内容的时候要使用它
7、Response.End() 终止响应,将之前缓存中的数据发给浏览器,End()之后的代码不会被继续执行,End方法里调用了Flush()方法。在终止一些非法请求的时候,比如盗链等可以用End()立即终止请求。
八、Server属性 Server是上下文对象context的一个属性,是HttpServerUtility类的一个对象,它提供对服务器上的方法和属性的访问。
常用方法: 1、MapPath方法:取得文件的物理路径
2、Transfer:第一个页面直接调用第二个页面,执行完第二个页面后不再返回第一个页面,立即响应到客户端浏览器。
Server.Transfer(path)内部重定向请求,Server.Transfer(“JieBanRen.aspx”)将用户的请求重定向给JieBanRen.aspx处理,是服务器内部的接管(不能重定向到外部网站),浏览器是意识不到这个接管的,不是象Response.Redirect那样经历通知浏览器“请重新访问url这个网址”和浏览器接到命令访问新网址的过程,是一次http请求,因此浏览器地址栏不会变化。
因为是内部接管,所以在被重定向到的页面中是可以访问到Request、Cookies等这些来源页面接受的参数的,就像这些参数是传递给他的,而Redirect则不行,因为是让浏览器去访问的。
注意Transfer是内部接管,因此不能像Redirect那样重定向到外部网站。Response.Redirect就可以重定向到外部网站,但不能内部重定向到ashx,否则会报错“执行子请求出错”。
3、Execute:第一个页面直接调用第二个页面,执行完第二个页面后再返回第一个页面执行,最后响应到客户端浏览器。
4、HtmlEncode()&HtmlDecode():将文本编码成可以在浏览器中可正确浏览的格式
5、UrlEncode()&&UrlDecode():URL编码和解码 *HtmlEncode和UrlEncode的区别:UrlEncode是处理超链接中的中文问题,HtmlEncode是处理html代码的