前言:从今天起我将写一个这样的系列,当然我主要是从最简单的方面去介绍的哦!
- Web应用程序和网站
(1) WebApplication(Web应用程序)和WebSite(网站)的区别?WebSite是为了兼容从ASP转过来的开发人员的习惯而存在的,用起来简单,比如不需要创建命名空间,cs代码修改后不需要重启就可以看到变化(无论是WebSite还是WebApplication,修改aspx都不需要重启),但是不利于工程化的开发,比如代码出错不容易发现,代码不分命名空间,开发技术上没有任何区别,只是开发,调试习惯不同而已。
- 基于ashx方式的asp.net开发
(1) 新建一个Html页,命名为:hello1.Htm
1 <form action="hello.ashx"> 2 3 <input type="text" name="username" /> 4 5 <input type="submit" value="提交" /> 6 7 </form>
(2) 新建一个【一般处理程序】Hello1.ashx,ProcessRequest中写入:
1 string username = context.Request["username"]; 2 3 context.Response.Write("hello world," + username);
(3) 每当用户请求访问ashx页面的时候,ProcessRequest方法就会被调用,在这里通过访问context.Request获得访问者的请求参数等,然后在ProcessRequest中通过context.Response向浏览器发回数据给浏览器,ProcessRequest结束之时就是服务器为这个浏览者本次访问服务完成之时。
(4) 浏览器向服务器端提交数据,被提交数据的表单(input,select,textare等)放到Form中通过action属性设定表单被提交到那个页面,为了在服务器端取出来表单项的值,需要在HTML中为表单元素设定Name属性,注意ID是给JS操作和Dom操作用的,name才是提交给服务器的,在服务器端用context.Request[“UserName”]来根据表单项的name来获得提交的属性值,通过context.Response.Write向浏览器输出处理后的显示HTML内容。
- 一段Jquery代码的复习
1 $(function(){ 2 3 $(“#TextBox”).mouseover(function(){ 4 5 $(this).CSS(”Color”,”Red”); 6 7 }); 8 9 });
注解:此段代码实现的功能是当鼠标离开控件是将控件中的字体颜色设置为红色。
- “返回”提交页面改进版
(1) 为了请求,返回的内容一样,将页面保存为1个Htm模板文本,模板中有一些待填值的占位符,第一次进入页面的时候就直接访问ashx,读取Html模板,将待填值占位符设置为空,然后输出到浏览器。
(2) 为了区分是第一次直接进入页面还是点击提交以后重新进入ashx,在Form中增加一个隐藏字段;<input type=”Hidden” name=”ispostback” value=”true”>,如果能够从Request中读取到ispostback=true就说明是点击提交以后重新进入ashx,负责就是第一次进入ashx。
(3) ASP.NET中将Web虚拟路劲(/images/1.jpg)转换为磁盘全路径(d://www.mysite.images/1.jpg)的方法是HttpContext.Current.Request.MapPath(“/1/入门2.htm”)。
(4) 实现思路是:在ProcessRequest中首先从Request中读取ispostback,如果读取到true,说明是提交进入的,就加载模板,并且进行占位符用计算后的值替换,否则就将模板中的占位符清空直接输出给浏览器。
(5) 刚进入Hello2.ashx的时候是直接向浏览器输出内容,用户在输出的内容中填入数值,再点击提交,服务器就知道提交回来了。(postback)
(6) 文本框上次输入的值在提交表单后有显示出来并不是理所当然的,是开发人员帮着读取提交上来的值然后渲染上去的。这就是asp.net和cs的关系,用aspx重写这个程序,使用ispostback等属性,对比。
(7)http是请求,响应的模型,服务器不会来读取浏览器的网页,能够得到的就是客户端网页提交过来的数据。
- Get和Post
(1) 还可以设定form的method属性指定表单提交方式,get(默认值)是通过URL传递表单值,post传递的表单值是隐藏到http报文中的,URL中看不到。
(2) get和post的区别:get是通过URL传递表单值,post通过URL看不到表单域的值,get传递的数据是有限的,如果要传递大数据量不能用get,比如:type=”file”上传文章,type=”password”传递密码或者<textarea>发表大段文章,post则没有限制,post会有浏览器提示重新提交表单的问题,get则没有,对于post的表单重新敲地址栏目刷新就不会提示重新提交了,因为重新敲地址栏就没有重新提交数据了。
(3) get方式url数据格式。服务器文件名后跟着”?”,由于客户端可能向服务器提交多个键值对,键值对之间用”&”进行分割,如果url中有汉字,特殊符号等,则需要对URL进行编码。
(4) 表单域只是设定了name的才会被提交给服务器(用gei方式看的清楚)。如果给submit按钮设定name,那么按钮的value也会被提交给服务器。
验证代码为:
1 string fullpath = context.Server.MapPath("Hello.htm"); //得到文件的全路径 2 3 string content = System.IO.File.ReadAllText(fullpath); 4 5 //context.Response.Write(content); 6 7 string ispostback = context.Request["ispostback"]; 8 9 if (ispostback == "true") 10 11 { 12 13 context.Response.Write("提交进入"); 14 15 } 16 17 else 18 19 { 20 21 context.Response.Write("直接进入"); 22 23 } 24 25 <form action="hello1.ashx"> 26 27 <input type="hidden" name="ispostback" value="true" /><!--这是一个隐藏字段--> 28 29 姓名:<input type="text" name="UserName" /> 30 31 <input type="submit" value="提交" /> 32 33 </form>