一、表单提交时注意
如果是以get方式提交数据的时候,在接收时是用QueryString方式进行接收
如果是以post请求数据时在接收时是用Form进行接收
为什么么要这样做呢?我们用Request[];的形式也能接收到数据啊?
---》当用户提交表单时如果是以get请求发送数据的那么用Form是接收不到数据的,
用post请求提交时QueryString 也是接收不到数据的,,我们发现,get请求是把文本框等提交的
内容放到url地址栏里提交,就是把这些内容追加到请求报文头的请求文件后面了,
post请求则是把这些内容放到请求报文体里,
通过测试发现QueryString读取不到请求报文体里的内容但是能够读取到url里的内容,
而Form则是能够读取到请求体里的内容url请求头里的读取不到。
我们提交表单时,大多数情况下,将表单的method属性设置为post(安全,可以传递大数据)
这时表单中各个元素的值会议请求报文体的方式发给服务端,
在服务端通过context.Request.Form来进行接收,所以表单的元素必须要加上name属性
注意一下隐藏域的应用,它也是一个表单元素,只不过在浏览器看不出该元素的效果,
但是当单击提交按钮时发出(post请求)该隐藏域的value属性的值也会提交到服务端,
然后再服务端也是通过Request.Form接收,
我们在‘计算’的这个小程序中用来判断用户是否单击了提交按钮,起到一个标识作用。
二、重定向
context.Response.Redirect()
这时服务器端返回的响应头中 ,包含了一个302响应码,和一个Location属性,
然后浏览器发现302标识重定向,重定项到Location属性指向的页面
1)context.Response.End()终止执行,该语句后面的代码都不会执行了
2)注意问题:
有哪些表单元素可以向服务器进行提交,而且有哪些属性会提交到服务端
readonly/ disabled: readonly和disabled都是只2读的,
区别在于readonly会把value值提交到服务器而disabled则不会
当我们点击【提交】按钮以后是浏览器将用户填写的文本框等控件中的值“提取”出来发送给服务器,
而不是服务器来读取用户填写的这个页面。哪些标签的哪些值会被提交给服务器呢?
将用户填写的内容提交到服务器有如下几个条件:
只能为 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属性的话,浏览器也不会提交该控件的值。这是与readonly的区别
放到form标签内。只有放到form标签内的标签才可能会被提交到服务器,form之外的input等标签被忽略。
知识点
1)url传值
//url传值
context.Response.Write("<a href='MyFirst.ashx?name=张三&pwd=12345'>哈哈</a>");
url传值会向服务器提交一个get请求,get请求是把文本框等提交的内容放到url地址栏里提交,
就是把这些内容追加到请求报文头的请求文件后面了
在服务端就可以通过context.Request.QueryString来接收
2)重定向
//重定向
context.Response.Redirect ("Login.ashx");
3)隐藏域
<input type='hidden' value='true' name='postBack' />
这个标签在浏览器端不会显示出来,
当用户点击表单里的提交按钮发送post请求时就会把这个hidden标签里的value值的内容提交到服务端,
那么我们在服务端就可以
判断浏览器提交的是get请求还是post请求了